4

为什么我们必须要有空白 XML 节点的概念?它们为 XML 解析的炼金术带来了什么好处?

这里有一个 Perl 的简单示例XML::LibXML

use strict;
use warnings;
use feature 'say';
use XML::LibXML;

my $xml = XML::LibXML->load_xml( string => <<'XMLDOC' );
<alphabet>
 <child name='alpha'/>
 <child name='bravo'/>
 <child name='charlie'/>
 <child name='delta'/>
 <child name='echo'/>
</alphabet>
XMLDOC

my ( $parent ) = $xml->findnodes( '/alphabet' );

my @all_kids  = $parent->childNodes;
my @real_kids = $parent->nonBlankChildNodes;

say 'All kids : ', scalar @all_kids;   # '11'
say 'Real kids : ', scalar @real_kids; # '5' => 6 blank child nodes

令我困惑的是,解析器在检索所有子节点和仅检索非空白节点之间进行了区分。

这样看来,这些空白节点必须至少有一个合理的用途。确切地知道这些用途是什么会很有趣。

4

2 回答 2

7

从 HTML 考虑这个案例:

<div><b>hello</b><i>world</i></div>

与这个:

<div>
    <b>hello</b>
    <i>world</i>
</div>

在第一个示例中,没有空格节点,渲染引擎不会在hello world之间放置空格。在第二个示例中,由于文本节点之间有一个空白节点,因此它将显示为hello world

您需要知道空白节点在那里,因为某些 XML 语言会关心它们的位置。

于 2011-12-24T21:56:08.863 回答
3

解析器无法区分重要的空白节点和非重要的空白节点。这完全取决于 XML 的语义。如果解析器消除了仅空白节点并且您正在编写一个它们很重要的应用程序,那么您将从另一个角度编写这个问题。

于 2011-12-24T20:22:17.580 回答