java – 不同的“getDocumentElement”和“getFirstChild”

前端之家收集整理的这篇文章主要介绍了java – 不同的“getDocumentElement”和“getFirstChild”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下Document对象 – Document myDoc.

myDoc持有一个XML文件

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

现在我想得到XML文件的根目录.有什么区别吗

@H_301_4@Node firstChild = this.myDoc.getFirstChild()

@H_301_4@Node firstChild = (Node)myDoc.getDocumentElement()

在第一种方式中,firstChild保存一个XML文件的节点根,但它不具有节点的深度.然而,在第二种方式中,firstChild将是所有深度的根.

例如,我有以下XML

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

文件保存.

在第一种情况下,int count = firstChild.getChildNodes()给出count = 0.

第二例会给予count = 3.

我对吗?

解决方法

如果在文档根节点之前有其他节点(如注释节点),则使用myDoc.getFirstChild()的节点可能不是文档根目录.看下面的例子: @H_301_4@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文件时:

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

给出以下结果:

@H_301_4@0 8 #comment 3 1 catalog

但是,如果我删除评论,它给出:

@H_301_4@3 1 catalog 3 1 catalog

猜你在找的Java相关文章