【问题标题】:perl xml parsingperl xml解析
【发布时间】:2011-08-08 03:11:01
【问题描述】:

我是 perl 新手,在使用 perl 解析 xml 时需要帮助。

将以下内容视为我的 xml 文件

<A>
    <B1>
    </B1>
    <B2>
    </B2>
    <B3>
        <c1>
        </c1>
        <c2>
        </c2>
        <c3>
        </c3>

    </B3>
</A>

我需要单独提取元素 B3 及其子节点。

我正在使用 XML:Simple 来解析 xml 文件。

如何将元素 B3 单独解析为变量,以便我可以使用 foreach 提取子节点.....?

提前谢谢...!!

【问题讨论】:

    标签: xml perl parsing


    【解决方案1】:

    您可以通过以下方式轻松解决这些问题:

    perl -MData::Dumper -MXML::Simple -e 'print Dumper XMLin("-")' < /tmp/file.xml
    

    这样做,你会发现你可以:

    use XML::Simple;
    my $xml = XMLin("/tmp/file.xml");
    my $b3_node = $xml->{B3};
    
    while ( my ($c_key, $c_node) = each %$b3_node ) {
        ... do your stuff here
    }
    

    【讨论】:

      【解决方案2】:

      XML::Simple 将创建一个散列对象,然后您可以循环该散列。请记住,嵌套节点也将是哈希对象。

      #!/usr/bin/perl
      use XML::Simple;
      #use Data::Dumper; # Not necessary 
      
      $xml = new XML::Simple;
      
      $data = $xml->XMLin('test.xml');
      
      
      $b3 = $data->{B3};
      
      while ( my ($key, $value) = each(%$b3) ) {
          print "$key => $value\n";
      }
      

      【讨论】:

      • 嗨 John,对于 print "$key => $value \n" 我得到输出通知 => ARRAY(0xb4227d0) ,其中通知是假定为 c1、c2、c3 等的元素。 ..这是什么意思...?
      • 阵列?我可以看到 HASH,但看不到数组。如果你得到一个哈希列表,那是因为这些节点有子节点或没有“文本”数据。
      【解决方案3】:

      如果你得到一个数组作为你的结果,那么第一级节点可能有相同的标签;像

      <A>
        <B>
          B1 data  
        </B>
        <B>
          B2 data
        </B>
        <B>
          B2 data
        </B>
      </A>
      

      您可以通过 $data->{B}[0]、$data->{B}[1] 和 $data->{B}[2] 访问数据。

      如果您在特定问题上需要更多帮助,您将不得不发布实际数据或非常接近的数据。

      【讨论】:

        猜你喜欢
        • 2011-03-25
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        • 2012-09-10
        • 1970-01-01
        相关资源
        最近更新 更多