【问题标题】:How to parse xml node with 2 attributes using XML::Simple and perl如何使用 XML::Simple 和 perl 解析具有 2 个属性的 xml 节点
【发布时间】:2017-05-26 15:43:11
【问题描述】:

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

【问题讨论】:

  • 您如何称呼 XML::Simple?您排除了一些可能很重要的代码。
  • "这是我返回的需要解析的 xml" 如果你返回它,那么你已经有了数据,不需要解析什么你刚刚创建?
  • 请您缩进您的 XML 数据和 Perl 代码,以便那些免费回答您问题的人可以阅读。另请阅读 How to Edit 以帮助您确保正确使用 Markdown。
  • 我已经清理了你的 Markdown 并修复了你的缩进。不客气,但下次请自己做。

标签: xml perl xml-parsing


【解决方案1】:
foreach my $key(keys $data->{'CategoryMapping'}) {
    print "ID = $key oldID = $data->{'CategoryMapping'}->{$key}->{'oldID'}\n";
}

【讨论】:

  • 你不能期待对“为什么投反对票?”的回应。问题。投票是匿名的是有原因的,你不能打破这种特权。我总是不赞成像您这样的 cmets“不具建设性”,据我所知,它们总是被删除。在这里,我首先对您的答案投了反对票,因为您可以给那些负担XML::Simple 的人提供的最佳建议是完全抛弃它,其次因为任何答案必须包含使用的配置。最佳配置不是默认配置,它取决于要解析的数据。这只是它糟糕的原因之一。
  • 我正在询问拒绝投票的原因,以便我可以改进我的答案。这个问题甚至与 XML::Simple 无关。它是关于解析复杂的数据结构。由开发人员决定使用或不使用 XML::Simple。不鼓励,但不禁止。我猜,否决一个完全正确的答案是您的个人选择。感谢您解释否决票。
  • 请写出您认为好的解决方案并观察所有问题中的任何批评意见,从而改进您的答案。如果您阅读收到的回复并尝试对其进行垃圾处理,您将不会有所改善;这正是没有人喜欢解释他们的投票的原因。主题行 How to parse xml node with 2 attributes using XML::Simple and perl 的问题是关于使用XML:Simple,正如您在回答中(隐式)使用它时所理解的那样。
  • 事实上,您的“解决方案”是如此简短,没有任何前言或解释,没有任何单独运行的代码或任何示例结果,它是“质量非常低”我>无论如何。
  • 感谢您的回答。你是对的。这不是关于我是否应该使用“xmlSimple”的问题。
【解决方案2】:

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

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

请阅读Why is XML::Simple “Discouraged”?。如果您发现自己对其中的内容存在分歧,那么您需要组建一个由XML::Simple 用户组成的隐士小组,他们更害怕成功而不是害怕模块本身

【讨论】:

  • 感谢您的评论。我切换到 xmlLib
  • @user3287677:那你为什么要接受Andrey的回答,反正这个回答不好,只是想建议你如何使用劣质模块。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多