我正在尝试使用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
知道如何让它发挥作用吗?
答案 0 :(得分:5)
来自文档:
$lineno = $node->line_number();
此函数返回在此期间找到标记的行号 解析。如果将节点添加到文档中,则行号为0。 如果将一个文档中的节点传递给另一个文档,则可能会出现问题 之一。
如果之前没有激活解析器的line_numbers标志 解析时,line_number()将始终返回0.
在XML操作过程中是否添加了节点?
不是。仔细研究表明,违规函数是load_xml
。用以下内容替换它,它可以正常工作:
my $xml = $parser->parse_file('some.xml');