如何使用XML :: LibXML获取节点的行号

时间:2011-08-10 11:40:23

标签: xml perl libxml2

我正在尝试使用XML::LibXML处理XML并报告某些元素所在的行。根据上面链接的文档,line_numbers选项应该做的伎俩,但我一直得到0.代码:

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

知道如何让它发挥作用吗?

1 个答案:

答案 0 :(得分:5)

来自文档:


$lineno = $node->line_number();
     

此函数返回在此期间找到标记的行号   解析。如果将节点添加到文档中,则行号为0。   如果将一个文档中的节点传递给另一个文档,则可能会出现问题   之一。

     

如果之前没有激活解析器的line_numbers标志   解析时,line_number()将始终返回0.


在XML操作过程中是否添加了节点?


不是。仔细研究表明,违规函数是load_xml。用以下内容替换它,它可以正常工作:

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