【发布时间】:2012-06-05 16:19:00
【问题描述】:
我有一个 XML 文件,其内容如下:
<Node id="7"/>
www
<Node id="10"/>
如何使用 XML::LibXML 和 Perl 来获取两个节点之间的内容,即“www”?
谢谢。
【问题讨论】:
标签: perl xml-libxml
我有一个 XML 文件,其内容如下:
<Node id="7"/>
www
<Node id="10"/>
如何使用 XML::LibXML 和 Perl 来获取两个节点之间的内容,即“www”?
谢谢。
【问题讨论】:
标签: perl xml-libxml
您处理的 XML 格式是糟糕!*
给定一个节点,您希望节点是它的兄弟节点,紧随其后(可能除了中间 cmets)并且是文本节点。
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> 会更好。
【讨论】: