2012-06-07 18 views
9

Ich habe folgende Document Objekt - Document myDoc.unterscheidet zwischen "GetDocumentElement" und "GetFirstChild"

myDoc hält eine XML Datei ...

myDoc = DocumentBuilderFactory.newInstance() 
      .newDocumentBuilder().parse(file); 

Jetzt möchte ich die Wurzel der XML-Datei erhalten. Gibt es einen Unterschied zwischen

Node firstChild = this.myDoc.getFirstChild() 

und

Node firstChild = (Node)myDoc.getDocumentElement() 

In der ersten Art und Weise, hält firstChild einen Knoten Wurzel einer XML Datei, aber es wird die Tiefe der Node nicht haben. In der zweiten Art wird firstChild jedoch die Wurzel mit der ganzen Tiefe sein.

Zum Beispiel, ich habe die folgende XML

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

und file es hält. Im ersten Fall gibt int count = firstChild.getChildNodes()count = 0.

Der zweite Fall wird count = 3 geben.

Bin ich richtig?

Antwort

14

Der Knoten, den Sie mithilfe von myDoc.getFirstChild() erhalten, ist möglicherweise nicht der Dokumentenstamm, wenn sich vor dem Dokumentstammknoten noch andere Knoten befinden, z. B. ein Kommentarknoten. Schauen Sie sich das Beispiel unten:

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()); 

    } 
} 

Wenn die folgende XML-Datei-Analyse:

<?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> 

ergibt folgendes Ergebnis:

0 
8 
#comment 
3 
1 
catalog 

Aber wenn ich den Kommentar zu entfernen, gibt es:

3 
1 
catalog 
3 
1 
catalog 
+2

ahh so führte der Kommentar zum diff Ereen .. wow danke! – URL87