上一讲我们讲解了DOM解析XML文档,但是都是在XML文档已知的情况下进行解析,这一讲我们来讲解一下DOM解析任意的XML文档,而实现这种方式唯一的办法就是采用递归方式。
1. 我们继续对上一讲程序进行接下去的剖析
package com.ahuier.xml.dom; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class DomTest3 { public static void main(String[] args) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new File("student.xml")); /* * 打印输出student.xml的一些版本信息、编码方式等 * 输出:1.0、UTF-8、true */ // System.out.println(doc.getXmlVersion()); // System.out.println(doc.getXmlEncoding()); // System.out.println(doc.getXmlStandalone()); /* * 我们上一个例子是获得Document对象,然后获得NodeList,这会我们换一下,获得文档的根元素节点 * 查看JDK文档中的Document的方法 * 使用 Element getDocumentElement() 方法 */ Element root = doc.getDocumentElement(); System.out.println(root.getTagName()); //打印出:学生名册 /* * 查看Element中的方法 * 使用这个方法:NodeList getChildNodes() * 它返回这个对象节点的所有孩子孩子的列表,如果这个节点没有孩子节点,则返回为空 */ NodeList list = root.getChildNodes(); //注意这边打印为7个。为什么是7个呢? 因为XML默认为空格也算是一个节点的孩子节点,可以尝试把XML中元素之间的空格去掉验证 System.out.println(list.getLength()); for(int i = 0; i < list.getLength(); i++){ //打印出这个节点的各个孩子节点的节点名称 System.out.println(list.item(i).getNodeName()); } System.out.println("-------- <1> ------------------------------ "); for(int i = 0; i < list.getLength(); i++){ Node n = list.item(i); System.out.println(n.getNodeType() + " : " + n.getNodeValue()); } System.out.println("--------- <2> -------------------------------"); for(int i = 0; i < list.getLength(); i++){ Node n = list.item(i); System.out.println(n.getTextContent()); //表示得到文本的内容 }