2017-02-25 42 views
0

我想弄清楚爲什麼當我想要原始文本字符串時,我在結果中獲取XML特殊字符。使用XML :: XPath的XML特殊字符get_nodelist

這裏是我的代碼:

#!/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" 
+2

我不知道該API,但嘗試打印'$ node-> getNodeValue()',而不是節點本身的字符串表示。 –

+0

感謝您的回覆。我今天意識到我沒有跟進這篇文章。出於某種原因,XML:Xpath對我來說非常非常慢。相反,我使用XML:Twig來導航我的XML並最終導入XHTML文件。這要快得多,並給我我需要的結果。 –

回答

2

它看起來像XML::XPath::XMLParser::as_string返回的XML表示節點。既然你在這種情況下得到的屬性,你應該嘗試使用getNodeValue來獲取值:

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

對於元素和文本節點,它看起來像你可以使用$node->string_value