2016-09-22 15 views
1

私は以下のようにjavaコードを持っています。私の理解によれば、与えられたtest.xmlファイルに親ノード<parent>の子ノードの数を表示する必要があります。XML - Javaを使用して子ノードの数を取得する方法

try { 
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
    Document doc = docBuilder.parse(new File("./test.xml")); 
    System.out.println(doc.getElementsByTagName("parent").item(0).getChildNodes().getLength()); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

これは私のtest.xmlファイルです。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<parent> 
    <sid>hello</sid> 
</parent> 

ここでは、このXMLで親ノードparentの子ノードの数は1(すなわち、<sid>hello</sid>)です。しかし、上記のスニペットは3として出力されます。誰かが私がここで何が起こっているか把握するのを助けてくれますか?私はJavaの初心者です。私はあなたの助けに感謝します。

+0

は、各ノードの種類を調べ。すべての子ノードが要素ノードであるとは限りません。私は要素型の子ノードが1つしかないことがわかります。 – VGR

+0

なぜ1の代わりに3を出力するのですか? 'parent'を含むすべてのノードを数えるスニペットですか? –

答えて

3

ここで何が起こっているのか理解してもらえますか?

あなたのノードparentは確か3子ノードを持っています

  1. <sid>hello</sid>
  2. 間の文字を含むテキストノードに対応する<parent><sid>
  3. 要素ノード間の文字を含むテキストノード</sid>および</parent>

混合内容として知られています。これは、特定の要素内でテキストと要素を混在させることができます。

<parent><sid>hello</sid></parent>でプログラムを起動しようとすると、タグの外に文字がないので、期待通りに1が得られます。 混合コンテンツ

良い例では、これを解析する場合、我々は「Hello」を含む1つのテキストノードを期待するとして、要素p2ノードを持つことになりますが

<p>Hello <strong>World</strong></p> 

のようなものを持つことができXHTMLで、要素ノード<strong>World</strong>


どのように我々は数の子ノード(sid子ノードの数)を得ることができますか?

最も簡単な方法は、彼らはあなたがここに必要なものである純粋なXMLデータ構造を解析するために使用されることを意図しているとして、代わりにJDOMまたはdom4jパーサーを使用することです。

コードは、JDOMの場合であろう:

SAXBuilder saxBuilder = new SAXBuilder(); 
Document document = saxBuilder.build(new File("./test.xml")); 
System.out.println(document.getRootElement().getChildren().size()); 

出力:

1 

コードは、dom4jの場合であろう:

SAXReader reader = new SAXReader(); 
Document document = reader.read(new File("./test.xml")); 
System.out.println(document.selectNodes("/parent/*").size()); 

出力:

1 
+0

私は同じXMLファイルを持っており、その子ノードは(sid)動的に作成するものです。そして、それは質問に与えられたのと同じ構造に従って、そのような "隠された"テキストフィールドがあるでしょう。では、どのようにして子ノードの番号( 'sid'子ノードの数)を得ることができますか? –

関連する問題