免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2872 | 回复: 7
打印 上一主题 下一主题

perl 解析XML问题求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-14 21:02 |只看该作者 |倒序浏览
我是用PERL的新手,以前是搞VC的,呵呵,所以问题多,请大家帮忙先谢了
    我用PERL 解析XML文件,
    use strict;
    use XML::Simple;
    $data = XMLin(./xxx.xml);
    for (my $i =$rowcount[$currentfile]; defined(my $d = $data->;{datalogelement}->;[$i]); $i++) {
                                my @tmp = split(/\|/,$d);
                print "@tmp\n";
        }
  在由于这个XML文件是自动增长的,当datalogelement有超过一条的时候,上面的语句工作得很好,但每次刚生成新的XML文件datalogelement只有0行或者1行的时候,整个进程都会退出请问如何判断datalogelement有超过两行,
当只有一行的时要用
my $d = $data->;{datalogelement}就是没有那个$i,


错误为:
Can't use string ("1058187780|1.05996|1|Default sta" as an ARRAY ref while "str
ict refs" in use at ./xml.pl line 189.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-07-14 21:24 |只看该作者

perl 解析XML问题求助

use strict;
use XML::Simple;

if(`cat ./xxx.xml|wc -l` >; 2){
$data = XMLin(./xxx.xml);
for (my $i =$rowcount[$currentfile]; defined(my $d = $data->;{datalogelement}->;[$i]); $i++) {
my @tmp = split(/\|/,$d);
print "@tmp\n";
}
}

论坛徽章:
0
3 [报告]
发表于 2003-07-14 21:53 |只看该作者

perl 解析XML问题求助

$data = XMLin('./xxx.xml',forcearray =>; 1);

不知道当初为什么forcearray =>; 1 没有成为缺省值。

论坛徽章:
0
4 [报告]
发表于 2003-07-14 22:21 |只看该作者

perl 解析XML问题求助

你的意思是不是设置了这个forcearray =>; 1可以不判断了??????
楼上那个先谢谢了,,,但是我是要判断是否有两个以上的datalogelement,整个文件是肯定超过2行的。。。。。。。。所以用cat是没有办法判断的还是感谢,,,

论坛徽章:
0
5 [报告]
发表于 2003-07-14 22:36 |只看该作者

perl 解析XML问题求助

forcearray =>;1这个参数指定有什么好处咯

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-07-14 23:36 |只看该作者

perl 解析XML问题求助

強迫每個element都用array...去接收....

论坛徽章:
0
7 [报告]
发表于 2003-07-16 18:31 |只看该作者

perl 解析XML问题求助

  1. ########################################################################
  2. #
  3. #   Function :simple_TransformHash
  4. #  
  5. #   Input:  $ddd_ref:ref to hash_struct
  6. #           $key: the key when transforming
  7. #   Return: ref to hash_struct which is transformed  
  8. #
  9. #######################################################################

  10. sub simple_TransformHash{
  11.     my ($ddd_ref,$key)=@_;         
  12.     foreach $hash_key(keys %$ddd_ref){
  13.          if (exists($ddd_ref->;{$hash_key}->;{$key})){
  14.          my $tmp_hash=$ddd_ref->;{$hash_key};
  15.          my $tmp_id=$ddd_ref->;{$hash_key}->;{$key};
  16.          delete $$tmp_hash{$key};
  17.          my %add_hash=($tmp_id=>;$tmp_hash);
  18.          $ddd_ref->;{$hash_key}=\%add_hash;
  19.                   
  20.          }     
  21.      }
  22.         
  23.     foreach $hash_value(values %$ddd_ref){
  24.          &simple_TransformHash($hash_value,$key);         
  25.     }
  26.     #print"ending dumper\n";          
  27.     return $ddd_ref;
  28. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2003-07-16 18:35 |只看该作者

perl 解析XML问题求助

  1. #######################################################################
  2. #
  3. # Function: prepare
  4. # Input:null
  5. # Output: 1. singal
  6. #         2. message
  7. #
  8. #
  9. #
  10. #
  11. #######################################################################
  12.   
  13. sub prepare{
  14.     #&validate();
  15.     if ($err_msg){
  16.           return (-1,$err_msg);
  17.     }
  18.     my $config_file="config.xml";               
  19.     $config_ref=eval{XMLin($config_file)};
  20.     if ($@){
  21.         print "$@\n";
  22.        return (-4,"Read file $xml_file failed.\n");
  23.     }  
  24.     $config_ref=&simple_TransformHash($config_ref,'id');
  25.     #print Dumper($config_ref);
  26.     return (1,"success");   
  27. }
复制代码


应该是你要的东西吧,使用这两个函数就行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP