我试图弄清为什么当我想到原始文本字符串时,我的结果中会在结果中获得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 > cat3"
name="cat2"
name="cat3"
name="cat4"
name="cat5"
我想要的是:
name="cat1 > cat3"
name="cat2"
name="cat3"
name="cat4"
name="cat5"
看起来XML::XPath::XMLParser::as_string
返回节点的XML表示。由于在这种情况下您有属性,因此您应该尝试使用getNodeValue
获取值:
print $node->getNodeValue . "n";
对于元素和文本节点,看起来您可以使用$node->string_value
。