2011-08-10 27 views
2

XML::LibXMLでXMLを処理しようとしていて、特定の要素がある行を報告しようとしています。上記のリンクのドキュメントによると、line_numbersオプションは、トリックを行う必要がありますが、私はコード0を得続ける:ノードが発見されたXML :: LibXMLでノードの行番号を取得する方法

use XML::LibXML; 

my $parser = XML::LibXML->new({ line_numbers => 1 }); 
my $xml = $parser->load_xml(location => 'some.xml'); 

for my $node ($xml->findnodes('//function')) { 
    warn $node->nodePath,"\n"; 
    warn $node->line_number,"\n"; 
} 

、私の出力は、それを得るためにどのように

/database/functions/function 
0 

任意のアイデアがありますワーキング?ドキュメントから

答えて

5


$lineno = $node->line_number(); 

この関数は、タグは 解析中に発見された行番号を返します。文書にノードが追加されている場合は、行番号は0です。 ある文書のノードが別の文書に渡された場合、問題が発生することがあります( )。

パーサのline_numbersフラグが 解析、LINE_NUMBER(前に活性化されなかった場合)は常に0


を返します。XML操作の過程で追加されたノードましたか?


それはませんでした。密接に調査したところ、問題の機能はload_xmlであった。それを次のように置き換えて正常に動作します:

my $xml = $parser->parse_file('some.xml'); 
+0

これは上記の完全なスニペットを見ることができます。ロード - > findnodes - > line_number。 – bvr

+0

@bvr:回答が更新されました – Zaid

+0

確かに、問題を解決しました。ありがとうございます。 – bvr