1

我使用带有模块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>.......
4

1 回答 1

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在调用时将选项设置为 undef XMLin。有关更多详细信息,请参阅文档(链接:https ://metacpan.org/pod/XML::Simple#SuppressEmpty-1-undef-in-out---handy )

于 2010-01-04T09:39:25.993 回答