为什么我们必须有空白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
让我感到困惑的是,解析器区分了检索所有子节点和非空节点。
那时似乎必须对这些空白节点至少有一个合理的用途。确切地知道这些用途是什么会很有趣。
答案 0 :(得分:7)
从HTML中考虑这个案例:
<div><b>hello</b><i>world</i></div>
vs this this:
<div>
<b>hello</b>
<i>world</i>
</div>
在第一个示例中,没有空白节点,渲染引擎不会在 hello world 之间放置空格。在第二个示例中,由于文本节点之间有一个空白节点,因此它将显示为 hello world 。
你需要知道那里有空白节点,因为一些XML语言会关心它们的位置。
答案 1 :(得分:3)
解析器无法区分重要的空白节点和非重要的空白节点。这完全取决于XML的语义。如果解析器消除了仅空白节点,并且您正在编写一个重要的应用程序,那么您将从另一个角度编写此问题。