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

私が困惑しているのは、パーサーがすべての子ノードを取得することと、空白でないノードのみを取得することを区別していることです。

その場合、これらの空白ノードには少なくとも1つの適切な使用が必要であるように思われます。それらの用途が何であるかを正確に知ることは興味深いでしょう。

4

2 に答える 2

7

HTMLからこのケースを考えてみましょう:

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

対これ:

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

最初の例では、空白ノードはなく、レンダリングエンジンはhelloworldの間にスペースを配置しませ。2番目の例では、テキストノード間に空白ノードがあるため、helloworldとして出力さ ます

一部のXML言語はそれらの配置を気にするので、空白ノードがそこにあることを知る必要があります。

于 2011-12-24T21:56:08.863 に答える
3

パーサーは、重要な空白ノードと重要でない空白ノードを区別できません。それは完全にXMLのセマンティクスに依存します。パーサーが空白のみのノードを排除し、それらが重要なアプリケーションを作成している場合、別の観点からこの質問を作成することになります。

于 2011-12-24T20:22:17.580 に答える