我使用带有模块XML:Simple的Perl脚本来解析XML提要:
my $xml=XMLin($resp->content);
my $xml2 = $xml->{params}{param}{value}{array}{data}{value}{struct}{member};
print $xml2->{prod_id}{value}{int}; #works fine
print $xml2->{product_text}{value}{string}; #returns a hash reference (hash(0x...)
我需要修改什么来获取文本:
<div class="text"> <div class="text_products">sdfsdf</div> </div>
而不是哈希引用?
这是XML数据:
<?xml version="1.0" encoding="UTF-8" ?>
- <methodResponse>
- <params>
- <param>
- <value>
- <array>
- <data>
- <value>
- <struct>
- <member>
<name>product_text</name>
- <value>
<string><![CDATA[ <div class="text"> <div class="text_products">sdfsdf</div> </div> ]]></string>
</value>
</member>
- <member>
<name>prod_id</name>
- <value>
<int>1290</int>
</value>
</member>
- <member>.......
答案 0 :(得分:0)
您的代码似乎对我有用。我复制了你的XML和你的perl代码并打印出来:
1290 <div class="text"> <div class="text_products">sdfsdf</div> </div>
使用Data :: Dumper将显示存在的数据结构。例如,当我运行您的示例代码时,相关部分的摘录是:
'value' => {
'string' => ' <div class="text"> <div class="text_products">sdfsdf</div> </div> '
}
我认为你可能会得到不同的东西的唯一原因是,如果在同一级别有另一个名为product_text的元素。
修改强>
如果您有时获得空元素并且它们作为hashref出现,则可以在调用SuppressEmpty
时将XMLin
选项设置为undef。有关详细信息,请参阅文档(链接:https://metacpan.org/pod/XML::Simple#SuppressEmpty-1-undef-in-out---handy)