2010-12-28 8 views
2

XML解析に関する質問があります。私はサンプルプログラムを試していましたが、構文解析の仕組みを理解しようと少し変更しましたが、私はかなり理解していない出力がありました。xerces-c:DOM xml parsing

これは私のxmlファイルです:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<root xmlns="http://www.test.com"> 
    <ApplicationSettings> 
      <option_a>"10"</option_a> 
      <option_b>"24"</option_b> 
    </ApplicationSettings> 
</root> 

が、私は()関数はGETCHILDNODESような呼び出したときに行く、それが呼び出されるように処理を理解しようとする私のプログラムを通して、デバッグ文を挿入します。これは私が受け取った出力です:

Parsing xml file... 
Processing Root... 
Processing children with getChildNodes()... 
>>>>>>>>>>> Loop child 0: Node name is: #text 
>>>>>>>>>>> Loop child 1: Node name is: ApplicationSettings 
= ApplicationSettings processing children with getChildNodes()... 
***** iter 0 child name is #text 
***** iter 1 child name is option_a 
***** iter 2 child name is #text 
***** iter 3 child name is option_b 
***** iter 4 child name is #text 
>>>>>>>>>>> Loop: 2 Node name is: #text 

出力から、私は簡単にそれが正しく私のxmlファイルを解析され推測することができます。しかし、プログラムでは、#テキスト(getNodeName()関数を使用して出力)という余分なノードも検出されています。私の質問は、これらのことは何ですか。#textが参照しています。

ありがとうございます!

答えて

3

この例のノード#textは、タグ間の空白を参照しています。例えば、ここで

<root xmlns="http://www.test.com"> 
    <ApplicationSettings> 

ラインフィード、...com"><App...間の4つのスペースがあります。

あなたは何が起こるかを見るために、以下の解析を試みることができます。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<root xmlns="http://www.test.com"><ApplicationSettings><option_a>"10"</option_a><option_b>"24"</option_b></ApplicationSettings></root> 
+0

興味深いです。私は何とか空白を扱った気がしました。これらの空白を子ノードとして追加しないようにする方法があるかどうかを知っていますので、ループで余分なオーバーヘッドを避けることができますか?唯一の解を解析していますか? – user459811

+0

@ user459811私はxercesに慣れていません、申し訳ありません。ドキュメントを参照して、「空白を無視する」のようなものを見つけるべきです。 – khachik

+0

Khachikに感謝します。誰か興味があればif条件を使って空白を無視することにした:if((currentNode-> getNodeType()== DOMNode :: TEXT_NODE)||(currentNode-> getNodeType()== DOMNode :: COMMENT_NODE)) { 持続する; } – user459811