2017-02-25 16 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と最終的にXHTMLファイルをナビゲートするためにXML:Twigを使用しています。これははるかに高速で、私に必要な結果を提供します。 –

答えて

2

XML::XPath::XMLParser::as_stringはのXML表現を返すように見えますノード。あなたはこのような場合には属性を持っているので、あなたは値を取得するためにgetNodeValueを使用してみてください:要素とテキストノードの場合

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

、あなたが$node->string_valueを使用することができますように見えます。

関連する問題