我正在尝试使用LibXML从XML读取标签。我可以打印所有标签;但是,由于某种原因,它还会打印“text”标签,这不是我的XML的一部分。任何人都可以向我解释是什么导致这种行为?有什么工作吗?如果下次我有一个带有“text”标签的XML标签,那么如何将该“text”标签与LibXML生成的额外“text”标签区分开来?
这是我的XML文件:
<?xml version="1.0"?>
<log>
<logentry
revision="935">
<author>darwin</author>
<date>2011-06-28T01:00:18.997106Z</date>
<msg>reintegrate branch</msg>
</logentry>
<logentry
revision="931">
<author>darwin</author>
<date>2011-06-21T22:15:01.881607Z</date>
<msg>reintegrate branch</msg>
</logentry>
</log>
我使用以下代码阅读XML:
my $parser = XML::LibXML->new();
my $doc = $parser->parse_string($svnInfo);
my $root = $doc->getDocumentElement();
my @nodes=$root->childNodes();
foreach my $child(@nodes) {
my $name = $child -> nodeName();
my @atts = $child -> getAttributes();
print "\n${name} (";
print ")\n";
}
这是我的输出:
text ()
logentry ()
text ()
logentry ()
text ()
感谢您的帮助。
答案 0 :(得分:7)
因为在最后</logentry>
和</log>
之间只有一个空白文本节点(包含换行符)。另请注意第一个text()
,它对应于<log>
与第一个<logentry>
之间的换行文字节点。
答案 1 :(得分:3)
尝试在$parser->keep_blanks(0)
my $doc = $parser->parse_string($svnInfo);
编辑将no_blanks更改为keep_blanks