次のDocument
オブジェクトがあります-_Document myDoc
_。
myDoc
はXML
ファイルを保持します...
_myDoc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(file);
_
ここで、XMLファイルのルートを取得したいと思います。違いはありますか
_Node firstChild = this.myDoc.getFirstChild()
_
そして
_Node firstChild = (Node)myDoc.getDocumentElement()
_
最初の方法では、firstChild
はXML
ファイルのノードルートを保持しますが、深さは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
_が得られます。
私は正しいですか?
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