2017-05-26 78 views
-1

这是我回来,我需要解析XML 2个属性。我需要提取的数据是CategoryMapping节点的属性“id”和“oldID”。如何解析XML节点使用XML ::简单和perl

<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/>"; 
    } 
} 
+1

你是如何调用XML ::简单的分歧?你排除了一些可能很重要的代码。 – AKHolland

+0

*“这是我回来,我需要解析XML” *如果您在返回它,那么你已经拥有的数据,并没有必要来分析你刚刚创造了什么? – Borodin

+1

请有恩典缩进你的XML数据和Perl代码,以便那些可以免费回答你的人可读。请阅读[*如何编辑*](https://stackoverflow.com/editing-help)以帮助您确保正确使用Markdown。 – Borodin

回答

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

你不能期待对“为什么downvote?”的回应?的问题。投票是匿名的原因,它不是为你打破这种特权。我总是把像你们这样的评论当作“不具建设性”,并且据我所知他们总是被删除。在这里,我首先低估了你的答案,因为你可以给那些背负“XML :: Simple”的人提供的最好建议是完全抛弃它,其次,因为任何答案都必须包含所使用的配置。最佳配置不是默认配置,而是取决于要解析的数据。这只是一个可怕的原因。 – Borodin

+0

我在问为什么downvote的原因,以便我可以改进我的答案。这个问题甚至不是关于XML :: Simple的。它是关于解析一个复杂的数据结构。开发人员决定使用或不使用XML :: Simple。它气馁,但不禁止。按照我的猜测,下调一个完全正确的答案是你的个人选择。谢谢你解释downvote。 – Andrey

+1

请写出您认为是一个好的解决方案,并观察所有问题中的任何批评,以改善您的答案。如果你阅读你收到的答复并试图废弃它,你将不会改进;这正是为什么没有人喜欢解释他们的选票。有关主题行的问题**如何使用XML :: Simple和perl **分析具有2个属性的xml节点是关于使用'XML:Simple',正如您在回答中使用它(隐式)时所了解的那样。 – Borodin

-1

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

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

请阅读Why is XML::Simple “Discouraged”?之一。如果你发现自己在用什么铺在那里,那么你需要形成恐惧的成功更XML::Simple用户的隐士群体比他们担心模块本身

+0

感谢您的评论。我切换到xmlLib – user3287677

+0

@ user3287677:那么为什么你从** Andrey **接受了答案,无论如何这是一个糟糕的答案,并且只是试图告诉你如何使用劣质模块。 – Borodin