Perl LibXML打印额外的“文本”标记

时间:2011-07-15 16:29:19

标签: xml linux perl svn libxml2

我正在尝试使用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 ()

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

因为在最后</logentry></log>之间只有一个空白文本节点(包含换行符)。另请注意第一个text(),它对应于<log>与第一个<logentry>之间的换行文字节点。

答案 1 :(得分:3)

尝试在$parser->keep_blanks(0)

之前添加my $doc = $parser->parse_string($svnInfo);

编辑将no_blanks更改为keep_blanks