web-dev-qa-db-ja.com

「getDocumentElement」と「getFirstChild」で異なります

次のDocumentオブジェクトがあります-_Document myDoc_。

myDocXMLファイルを保持します...

_myDoc = DocumentBuilderFactory.newInstance()
            .newDocumentBuilder().parse(file);
_

ここで、XMLファイルのルートを取得したいと思います。違いはありますか

_Node firstChild = this.myDoc.getFirstChild() 
_

そして

_Node firstChild = (Node)myDoc.getDocumentElement()
_

最初の方法では、firstChildXMLファイルのノードルートを保持しますが、深さはNodeにはなりません。ただし、2番目の方法では、firstChildがすべての深さのルートになります。

たとえば、私は次のXMLを持っています

_<inventory>
    <book num="b1">
    </book>
    <book num="b2">
    </book>
    <book num="b3">
    </book>
</inventory>
_

そしてfileはそれを保持します。

最初のケースでは、int count = firstChild.getChildNodes()は_count = 0_を与えます。

2番目のケースでは_count = 3_が得られます。

私は正しいですか?

11
URL87

MyDoc.getFirstChild()を使用して取得したNode)は、コメントノードなどのドキュメントルートノードの前に他のノードがある場合、ドキュメントルートではない可能性があります。以下の例を見てください。

import org.w3c.dom.*;

public class ReadXML {

    public static void main(String args[]) throws Exception{     

        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        // Document elements
        Document doc = docBuilder.parse(new File(args[0]));

        Node firstChild = doc.getFirstChild();
        System.out.println(firstChild.getChildNodes().getLength());
        System.out.println(firstChild.getNodeType());
        System.out.println(firstChild.getNodeName());

        Node root = doc.getDocumentElement();
        System.out.println(root.getChildNodes().getLength());
        System.out.println(root.getNodeType());
        System.out.println(root.getNodeName());

    }
}

次のXMLファイルを解析する場合:

<?xml version="1.0"?>
<!-- Edited by XMLSpy -->
<catalog>
   <product description="Cardigan Sweater" product_image="cardigan.jpg">
      <catalog_item gender="Men's">
         <item_number>QWZ5671</item_number>
         <price>39.95</price>
         <size description="Medium">
            <color_swatch image="red_cardigan.jpg">Red</color_swatch>
            <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
         </size>
         <size description="Large">
            <color_swatch image="red_cardigan.jpg">Red</color_swatch>
            <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
         </size>
      </catalog_item>    
   </product>
</catalog>

次の結果が得られます。

0
8
#comment
3
1
catalog

しかし、コメントを削除すると、次のようになります。

3
1
catalog
3
1
catalog
15
dragon66