Perl LibXML打印额外的"文本"标记

lwi*_*ono 3 xml linux svn perl 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>
Run Code Online (Sandbox Code Playgroud)

我使用以下代码阅读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";
}
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

text ()

logentry ()

text ()

logentry ()

text ()
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

Jim*_*son 7

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

  • 您对XML阅读器的特定实现可以提供忽略仅空白节点的选项,但通常解析器无法知道它们对_you_是否重要,因此它返回它们.如果你愿意,你可以随意忽略它们. (3认同)