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が参照しています。
ありがとうございます!
興味深いです。私は何とか空白を扱った気がしました。これらの空白を子ノードとして追加しないようにする方法があるかどうかを知っていますので、ループで余分なオーバーヘッドを避けることができますか?唯一の解を解析していますか? – user459811
@ user459811私はxercesに慣れていません、申し訳ありません。ドキュメントを参照して、「空白を無視する」のようなものを見つけるべきです。 – khachik
Khachikに感謝します。誰か興味があればif条件を使って空白を無視することにした:if((currentNode-> getNodeType()== DOMNode :: TEXT_NODE)||(currentNode-> getNodeType()== DOMNode :: COMMENT_NODE)) { 持続する; } – user459811