免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: rexuekonglong
打印 上一主题 下一主题

求助:perl 处理xml内容 [复制链接]

论坛徽章:
0
61 [报告]
发表于 2014-03-03 10:34 |只看该作者
回复 54# pitonas


    apache+perl+cgi 中文字符乱码问题搞定。
    原因:1、系统字符集要调整zh_CN.utf-8
            2、脚本存储字符编码集需要调整UTF-8
            3、apache 文件夹下 /etc/apache2/envvars 文件需要增加apache环境字符集  export LANG=zh_CN.UTF-8

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
62 [报告]
发表于 2014-03-03 11:51 |只看该作者
学习了!
{:2_172:} 赞一个!

回复 61# rexuekonglong


   

论坛徽章:
0
63 [报告]
发表于 2014-03-04 11:50 |只看该作者
回复 62# pitonas

细化任务又下达了。。。。

1、如果没有 <entry> 这个元素节点,返回输出“检索失败”(这个好像因为软件原因,有些内容搜索不出来产生的xml只有第一行 <list>)
2、显示搜索结果总数,分页显示前100条

第一个我好像搞出来了

  1. my $data  = $y->XMLin($xml);
  2. if ($data){
  3.    my @data =
  4.      grep { !$first{ $_->{path} . $_->{filename} }++ } @{ $data->{entry} };
  5.     if(!@data){
  6.      print "检索失败"
  7.      }
  8.       else{
  9.       my @print = qw/author path filename message contents/;
  10.       
  11. #---------------统计数量没有成功----------------------------------

  12.      $my count = ($data=~s/entry/#/g) ;
  13.      print "总共$count 条结果,每页显示10条"

  14. #---------------------------------------------------------------     
  15.      for my $h (@data) {
  16.      print "<<<<<<<<<<< \n";
  17.      printf "%-20s%s\n", $_, $h->{$_} for @print;
  18.      print "<<<<<< \n";
  19.      print "\n\n";
  20.     }
  21.   }
  22. }
复制代码
这个统计结果怎么搞? 每10个结果翻一页,这个又怎么做呢?





   

论坛徽章:
0
64 [报告]
发表于 2014-03-04 16:37 |只看该作者
rexuekonglong 发表于 2014-03-04 11:50
回复 62# pitonas

细化任务又下达了。。。。
  1. my $count = 0;

  2. my $data  = $y->XMLin($xml);
  3. if ($data){
  4.    my @data =
  5.      grep { !$first{ $_->{path} . $_->{filename} }++ } @{ $data->{entry} };
  6.     if(!@data){
  7.      print "检索失败"
  8.      }
  9.       else{
  10.       my @print = qw/author path filename message contents/;
  11.       
  12. #---------------统计结果貌似成功---------
  13.      foreach (@data){
  14.       $count ++;
  15.      }
  16.      print "总共$count 条结果,每页显示10条"

  17. #---剩下任务=>实现结果数量超过10个,页面翻页--     
  18.      for my $h (@data) {
  19.      print "<<<<<<<<<<< \n";
  20.      printf "%-20s%s\n", $_, $h->{$_} for @print;
  21.      print "<<<<<< \n";
  22.      print "\n\n";
  23.     }
  24.   }
  25. }
复制代码
下一个优化任务=>实现结果数量超过10个,页面翻页。

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
65 [报告]
发表于 2014-03-04 19:02 |只看该作者
how about this ?
生成 html
try:
perl script.pl > this.html
firefox this.html
  1. #!/usr/bin/perl

  2. #my @data  = ();   # test for empty @data;
  3. my @data  = 'A' .. 'Z';
  4. my $count = @data;
  5. my @pages = map { join "\n<br>\n", @$_ }
  6.   map { [ splice @data, 0, 10 ] } 0 .. $count / 10;

  7. my ( %html, $key );

  8. while (<DATA>) {
  9.     if (/^#\s(\w+)/) {
  10.         $key = $1;
  11.     }
  12.     else { $html{$key} .= $_ }
  13. }

  14. if ( !$count ) {
  15.     print @html{qw/head_begin head_end body_begin/};
  16.     print "<br><br>检索失败<br><br>";
  17.     print $html{html_end};
  18.     exit;
  19. }

  20. print $html{head_begin}, "\n";
  21. print $html{script},     "\n";
  22. print $html{head_end},   "\n";
  23. print $html{body_begin}, "\n";
  24. print "<br>总共 $count 条结果,每页显示10条<br><br>\n";
  25. print $html{page_1}, "\n";

  26. for my $e ( 1 .. $#pages ) {
  27.     my $d = $e + 1;
  28.     my $H =
  29. "<td class=\"inactive\" id=\"cell$d\" onclick=\"showLayer(this,\'d$d\',$e);\">页$d</td>";
  30.     print $H, "\n";
  31. }

  32. print $html{page_2}, "\n";
  33. print
  34. "<div id=\"d1\" class=\"layer\" style=\"display:block;background-color:#FFFFFF;\">\n$pages[0]</div>\n";

  35. for my $e ( 1 .. $#pages ) {
  36.     my $d = $e + 1;
  37.     my $H =
  38. "<div id=\"d$d\" class=\"layer\" style=\"display:none;\">\n$pages[$e]</div>\n";
  39.     print $H, "\n";
  40. }

  41. print $html{html_end};

  42. # html from
  43. # http://karen.cngogo.org/read.php?fid=5&tid=46&fpage

  44. __DATA__
  45. # head_begin

  46. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  47.         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  48. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  49. <head>
  50.         <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  51.   <title> 检索结果 </title>
  52.   
  53. # script

  54. <style>
  55. .active {
  56.     border: 1px solid #7D7D7D;
  57.     border-bottom: none;
  58.     width:70;
  59.     cursor:pointer;
  60. }
  61. .inactive {
  62.     border: none;
  63.     border-bottom: 1px solid #7D7D7D;
  64.     width:70;
  65.     cursor:pointer;
  66. }
  67. .layer {
  68.     border: 1px solid #7D7D7D;
  69.     border-top: none;
  70.     width:800;
  71.     height:200;
  72. }
  73. </style>
  74. <script type="text/javascript">

  75. var currentLayer = "cell1";
  76. var currentDiv   = "d1";
  77. var defaultColor = "#FFFFFF";

  78. function showLayer(obj, div){
  79.     if(currentLayer!=obj.id) {
  80.         showIt(currentLayer,currentDiv,false);
  81.         currentLayer = obj.id;
  82.         currentDiv   = div;
  83.         showIt(currentLayer,currentDiv,true);
  84.     }
  85. }
  86. function showIt(o, d, mode){
  87.     var obj = document.getElementById(o);
  88.     var div = document.getElementById(d);
  89.     obj.className     = mode ? "active" : "inactive";
  90.     div.style.display = mode ? "block" : "none";
  91. }

  92. </script>

  93. # head_end

  94. </head>

  95. # body_begin

  96. <body>

  97. # page_1

  98. <table border="0" cellspacing="0" cellpadding="5">
  99. <tr align="center">
  100. <td class="active" id="cell1" onclick="showLayer(this,'d1');">页1</td>

  101. # page_2

  102. <td style="border-bottom:1px solid #7D7D7D;"> </td>
  103. </tr>
  104. </table>

  105. # html_end

  106. </body>
  107. </html>
复制代码

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
66 [报告]
发表于 2014-03-04 19:04 |只看该作者

论坛徽章:
0
67 [报告]
发表于 2014-03-10 17:01 |只看该作者
回复 66# pitonas
其实,我在思考,我这个程序起始页是index.cgi,运行页是login.cgi,而真正显示页是template/login.html.tmpl,如果想要实现翻页,
是不是直接修改login.html.tmpl   我去试试把后缀改了,试试。

论坛徽章:
0
68 [报告]
发表于 2014-03-10 17:30 |只看该作者
回复 65# pitonas

你这个是根据页面长度超过规定翻页?还是根据显示数目来翻页?

   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
69 [报告]
发表于 2014-03-10 18:33 |只看该作者
本帖最后由 pitonas 于 2014-03-10 11:40 编辑

{:2_172:}  每10个结果翻一页
example: A ~ Z 26个结果 == 3页(10, 10, 6 )
回复 68# rexuekonglong


   

论坛徽章:
0
70 [报告]
发表于 2014-03-11 10:37 |只看该作者
回复 69# pitonas

“生成 html
try:
perl script.pl > this.html
firefox this.html ”

这段怎么理解? 下面的代码是一个单独的生成可翻页结果展示的html页的 perl代码?  这段代码是添加到 login.cgi 尾部? 还是login.cgi 再调用这个代码的perl脚本?

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP