我有以下Document对象 – Document myDoc.
myDoc = DocumentBuilderFactory.newInstance() .newDocumentBuilder().parse(file);
现在我想得到XML文件的根目录.有什么区别吗
Node firstChild = this.myDoc.getFirstChild()
和
Node firstChild = (Node)myDoc.getDocumentElement()
在第一种方式中,firstChild保存一个XML文件的节点根,但它不具有节点的深度.然而,在第二种方式中,firstChild将是所有深度的根.
例如,我有以下XML
<inventory> <book num="b1"> </book> <book num="b2"> </book> <book num="b3"> </book> </inventory>
文件保存.
在第一种情况下,int count = firstChild.getChildNodes()给出count = 0.
第二例会给予count = 3.
我对吗?
解决方法
如果在文档根节点之前有其他节点(如注释节点),则使用myDoc.getFirstChild()的节点可能不是文档根目录.看下面的例子:
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