0
我有内容类似这样的XML文件:如何使用Perl的XML :: LibXML来提取标签之间的内容?
<Node id="7"/>
www
<Node id="10"/>
怎么可能使用XML ::的libxml和Perl采取两个节点之间,即“WWW”的内容?
谢谢。
我有内容类似这样的XML文件:如何使用Perl的XML :: LibXML来提取标签之间的内容?
<Node id="7"/>
www
<Node id="10"/>
怎么可能使用XML ::的libxml和Perl采取两个节点之间,即“WWW”的内容?
谢谢。
,你必须处理XML格式是可怕!*
给出一个节点,你希望那是它的兄弟姐妹节点,紧跟它(除非是中介评论)和是文本节点。
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;
__DATA__
<root>
<Node id="7"/>
www
<Node id="10"/>
bar
</root>
* — www
应该是Node
一个孩子。例如,<Node id="7">www</Node>
会更好。
@ user1437832,修正了一个错误。 – ikegami
Thans很多为您的答复。这非常有帮助。解决方案的关键是“nextSibling()”方法。对于XML格式,是的,这很糟糕,但我无法将其更改为另一种格式。所以,我必须处理这个问题。但没关系,我现在可以从我的xml文件中提取我想要的内容。 – user1437832
@ user1437832,如果答案符合您的需求,请批准它(单击复选标记)以标记您的问题已解决。 – ikegami