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