如何使用XML :: Simple和perl解析具有2个属性的xml节点

时间:2017-05-26 15:43:11

标签: xml perl xml-parsing

这是我要返回的xml,需要解析。我需要提取的数据是CategoryMapping节点的属性'id'和'oldID'。

<GetCategoryMappingsResponse 
  xmlns="urn:ebay:apis:eBLBaseComponents">
  <Timestamp>2017-05-26T13:51:34.492Z</Timestamp>
  <Ack>Success</Ack>
  <Version>989</Version>
  <Build>E989_CORE_API_18131074_R1</Build>
  <CategoryMapping id="183872" oldID="43010"/>
  <CategoryMapping id="183322" oldID="20483"/>
  <CategoryMapping id="1290" oldID="43014"/>
  <CategoryMapping id="183888" oldID="43015"/>
  <CategoryMapping id="48718" oldID="43016"/>
  <CategoryMapping id="183051" oldID="45064"/>

...

  <CategoryMapping id="183174" oldID="83983"/>
  <CategoryMapping id="184437" oldID="15"/>
  <CategoryMapping id="183185" oldID="83984"/>
<CategoryVersion>117</CategoryVersion>
</GetCategoryMappingsResponse>

这是我尝试过的perl但它没有返回所有数据

foreach $key (keys $data->{CategoryMapping}) {

    print "($rownum) id=$key ";
    my %new_hash = %{$data->{CategoryMapping}{$key}};
    foreach $key2 (keys %new_hash) {
        print "$key2=$new_hash{$key2}<br/>";
    }
}

2 个答案:

答案 0 :(得分:-1)

foreach my $key(keys $data->{'CategoryMapping'}) {
    print "ID = $key oldID = $data->{'CategoryMapping'}->{$key}->{'oldID'}\n";
}

答案 1 :(得分:-1)

对于任何询问如何使用XML::Simple做某事的问题,只有一个正确的答案,那就是如果你重视自己的生活和理智,就不得不尝试

模块自己的文档建议不要使用它,如果你忽略了这样的所有警告,那么没有人会想要对当天负责,也许不是今天,也许不是明天,但很快,它崩溃和烧伤在你的头上,因为有人为其中一个元素添加了一个属性

请阅读Why is XML::Simple “Discouraged”?。如果你发现自己不同意那里的内容,那么你需要组建一个隐士组XML::Simple用户,他们担心成功比他们担心模块本身更多