Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用xml::Simple和perl解析具有2个属性的xml节点_Xml_Perl_Xml Parsing - Fatal编程技术网

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

如何使用xml::Simple和perl解析具有2个属性的xml节点,xml,perl,xml-parsing,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>9

这是我返回的需要解析的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"/>

2017-05-26T13:51:34.492Z
成功
989
E989_CORE_API_18131074_R1


117
这是我尝试过的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/>";
    }
}
foreach$key(key$data->{CategoryMapping}){
打印“($rownum)id=$key”;
我的%new_hash=%{$data->{CategoryMapping}{$key};
foreach$key2(键%new\u散列){
打印“$key2=$new_hash{$key2}
”; } }
对于任何询问如何使用
XML::Simple
做某事的问题,只有一个正确的答案,那就是如果你珍视自己的生命和理智,你甚至不能尝试

模块自己的文档建议不要使用它,如果您忽略所有类似于此的警告,那么就没有人愿意为这一天负责,可能不是今天,也可能不是明天,但很快,因为有人在其中一个元素中添加了属性,所以它崩溃并烧坏了您的脑袋


请阅读。如果您发现自己不同意这里的说法,那么您需要组建一个隐居的
XML::Simple
用户组,他们害怕成功,而不是模块本身

您如何称呼XML::Simple?您排除了一些可能很重要的代码。“这是我返回的需要解析的xml”如果您要返回它,那么您已经有了数据,并且不需要解析您刚刚创建的内容?请优雅地缩进您的XML数据和Perl代码,以便免费回答您问题的人能够阅读。还请阅读以帮助您确保正确使用标记。我已经清理了您的标记并修复了您的缩进。不客气,但下次请你自己做。你不能指望对“为什么投反对票?”的问题有回应。投票是匿名的,这是有原因的,你不能破坏这种特权。我总是对你这样的评论投“不具建设性”的反对票,据我所知,它们总是被删除。在这里,我对你的答案投了反对票,首先是因为你能给那些有
XML::Simple
负担的人的最好建议是完全抛弃它,其次是因为任何答案都必须包括所使用的配置。最佳配置不是默认配置,它取决于要解析的数据。这只是糟糕的一个原因。我在问投票被否决的原因,以便改进我的答案。这个问题甚至不是关于XML::Simple的。它是关于解析一个复杂的数据结构。由开发人员决定使用还是不使用XML::Simple。这是不鼓励的,但不是禁止的。我想,否决一个完全正确的答案是你个人的选择。谢谢你解释反对票。请写下你认为是一个好的解决方案,并观察所有问题中的任何批评,以改进你的答案。如果你读了你得到的回复并试图把它扔掉,你就不会进步;这正是为什么没有人愿意解释他们的投票。主题行中的一个问题是如何使用xml::Simple和perl解析具有两个属性的xml节点,这是关于使用
xml:Simple
,正如您在回答中(隐式)使用它时所理解的那样。事实上,您的“解决方案”非常简短,没有任何前言或解释,也没有任何将单独运行的代码或任何示例结果,这是“非常低质量”无论如何。谢谢你的回答。你说得对。这不是我是否应该使用“xmlSimple”的问题。谢谢你的评论。我换了xmlLib@user3287677:那么你为什么接受安德烈的回答,这是一个糟糕的答案,只是试图建议你如何使用较差的模块。
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/>";
    }
}
foreach my $key(keys $data->{'CategoryMapping'}) {
    print "ID = $key oldID = $data->{'CategoryMapping'}->{$key}->{'oldID'}\n";
}