URL*_*L87 11 java xml document nodes
我有以下Document对象 - Document myDoc.
myDoc持有XML... 的文件
myDoc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(file);
Run Code Online (Sandbox Code Playgroud)
现在我想获得XML文件的根目录.两者之间有什么区别吗?
Node firstChild = this.myDoc.getFirstChild()
Run Code Online (Sandbox Code Playgroud)
和
Node firstChild = (Node)myDoc.getDocumentElement()
Run Code Online (Sandbox Code Playgroud)
在第一种方式中,firstChild保存XML文件的节点根,但它不具有深度Node.然而,在第二种方式中,firstChild将是具有所有深度的根.
例如,我有以下XML
<inventory>
<book num="b1">
</book>
<book num="b2">
</book>
<book num="b3">
</book>
</inventory>
Run Code Online (Sandbox Code Playgroud)
并file持有它.
在第一种情况下,int count = firstChild.getChildNodes() 给出 count = 0.
第二种情况会给出count = 3.
我对吗?
dra*_*n66 15
如果在文档根节点之前还有其他节点(例如注释节点),则使用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());
}
}
Run Code Online (Sandbox Code Playgroud)
解析以下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>
Run Code Online (Sandbox Code Playgroud)
给出以下结果:
0
8
#comment
3
1
catalog
Run Code Online (Sandbox Code Playgroud)
但如果我删除评论,它会给出:
3
1
catalog
3
1
catalog
Run Code Online (Sandbox Code Playgroud)