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

관련 문제