@H_301_3@
为什么我们必须有空白
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
让我感到困惑的是,解析器区分了检索所有子节点和非空节点.
那么这些空白节点必须至少有一个合理的用途.确切地知道这些用途是什么会很有趣.
解决方法
从HTML中考虑这种情况:
<div><b>hello</b><i>world</i></div>
vs这一个:
<div> <b>hello</b> <i>world</i> </div>
在第一个示例中,没有空白节点,渲染引擎不会在helloworld之间放置空格.在第二个例子中,由于文本节点之间有一个空白节点,它将作为hello world出现.
你需要知道那里有空白节点,因为一些XML语言会关心它们的位置.
@H_301_3@