2011-08-10 39 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