2012-06-05 5 views

답변

2

XML 형식은 끔찍한입니다! *

즉시 (아마도 중간 의견 제외)을 따라, 당신의 형제 인 노드를 원하는 노드 감안할 및 텍스트 노드입니다.

__DATA__ 
<root> 
<Node id="7"/> 
www 
<Node id="10"/> 
bar 
</root> 

* — www

use strict; 
use warnings; 
use feature qw(say); 

use XML::LibXML qw(XML_COMMENT_NODE XML_TEXT_NODE); 

sub following_text { 
    my ($node) = @_; 
    my $text = ''; 
    while ($node = $node->nextSibling()) { 
     my $node_type = $node->nodeType(); 
     next if $node_type == XML_COMMENT_NODE; 
     last if $node_type != XML_TEXT_NODE; 
     $text .= $node->data(); 
    } 

    return $text; 
} 

my $parser = XML::LibXML->new(); 
my $doc = $parser->parse_fh(\*DATA); 
my $root = $doc->documentElement(); 
my ($node) = $root->findnodes('//Node[@id="7"]'); 
my $text = following_text($node); 

say $text; 

Node의 자식이어야합니다. 예를 들어 <Node id="7">www</Node>이 좋습니다.

+0

@ user1437832, 버그 수정. – ikegami

+0

귀하의 회신에 많은 도움이됩니다. 그것은 매우 도움이되었습니다. 솔루션의 핵심은 "nextSibling()"메소드였습니다. XML 형식의 경우 예, 끔찍하지만 다른 형식으로 변경할 수는 없습니다. 그래서, 나는 이것을 처리해야합니다. 하지만 괜찮아, 나는 내 XML 파일에서 원하는 것을 추출 할 수있다. – user1437832

+0

@ user1437832, 답변이 사용자의 요구 사항을 충족하는 경우 문제를 해결하기 위해 승인하십시오 (체크 표시를 클릭하십시오). – ikegami

관련 문제