【问题标题】:XML special characters using XML::XPath get_nodelistXML 特殊字符使用 XML::XPath get_nodelist
【发布时间】:2017-07-16 14:00:51
【问题描述】:

我想弄清楚为什么当我想要原始文本字符串时,我的结果中会出现 XML 特殊字符。

这是我的代码:

#!/usr/bin/perl
use strict;
use warnings;
use XML::XPath;

my $xp = XML::XPath->new(ioref => \*DATA);

my $names = $xp->find('/category/event/@name');

foreach my $node ( $names->get_nodelist ) {
  print XML::XPath::XMLParser::as_string( $node ) . "\n";
}

__DATA__
  <category name="a">
    <event name="cat1 > cat3" />  
    <event name="cat2" />  
    <event name="cat3" />  
    <event name="cat4" />  
    <event name="cat5" />  
  </category>

这是我的结果:

 name="cat1 &gt; cat3"
 name="cat2"
 name="cat3"
 name="cat4"
 name="cat5"

我想要的是这个:

 name="cat1 > cat3"
 name="cat2"
 name="cat3"
 name="cat4"
 name="cat5"

【问题讨论】:

  • 我不知道该 API,但尝试打印 $node-&gt;getNodeValue() 而不是节点本身的字符串表示形式。
  • 感谢您的回复。我今天意识到我没有跟进这篇文章。出于某种原因,XML:Xpath 对我来说非常非常慢。相反,我使用 XML:Twig 来导航我的 XML 和最终的 XHTML 文件。这速度更快,并为我提供了我需要的结果。

标签: xml perl xpath


【解决方案1】:

看起来XML::XPath::XMLParser::as_string 返回了节点的 XML 表示。由于在这种情况下您已经获得了属性,因此您应该尝试使用getNodeValue 来获取值:

print $node->getNodeValue . "\n";

对于元素和文本节点,看起来你可以使用$node-&gt;string_value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多