0
는이 같은 내용으로 XML 파일이 있습니다Perl의 XML :: LibXML을 사용하여 태그간에 내용을 추출하려면 어떻게해야합니까?
<Node id="7"/>
www
<Node id="10"/>
어떻게 그것이 가능하여 XML :: LibXML와 펄, 즉 'www'를 두 노드 사이의 컨텐츠를 취할?
감사합니다. 당신이 처리해야
는이 같은 내용으로 XML 파일이 있습니다Perl의 XML :: LibXML을 사용하여 태그간에 내용을 추출하려면 어떻게해야합니까?
<Node id="7"/>
www
<Node id="10"/>
어떻게 그것이 가능하여 XML :: LibXML와 펄, 즉 'www'를 두 노드 사이의 컨텐츠를 취할?
감사합니다. 당신이 처리해야
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>
이 좋습니다.
@ user1437832, 버그 수정. – ikegami
귀하의 회신에 많은 도움이됩니다. 그것은 매우 도움이되었습니다. 솔루션의 핵심은 "nextSibling()"메소드였습니다. XML 형식의 경우 예, 끔찍하지만 다른 형식으로 변경할 수는 없습니다. 그래서, 나는 이것을 처리해야합니다. 하지만 괜찮아, 나는 내 XML 파일에서 원하는 것을 추출 할 수있다. – user1437832
@ user1437832, 답변이 사용자의 요구 사항을 충족하는 경우 문제를 해결하기 위해 승인하십시오 (체크 표시를 클릭하십시오). – ikegami