package com.imooc.domtest.test;
import java.awt.print.Book;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DOMTest_1 {
public static void main(String[] args) {
try {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = db.parse("Book.xml");
//获取所有book节点
NodeList nodeList = document.getElementsByTagName("book");
//输出一共有多少个book节点
System.out.println("一共有" + nodeList.getLength() + "本书");
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println("==================下面开始遍历第" + (i+1) + "本书的内容============");
//循环遍历获取每一个book
Node book = nodeList.item(i);
//通过Node对象的getAttributes()方法获取book的所有的属性。注:不是子节点
NamedNodeMap attrs = book.getAttributes();
System.out.println("第" + (i+1) + "本书共有" + attrs.getLength() + "个属性");
for (int j = 0; j < attrs.getLength(); j++) {
//循环遍历获取book的属性名和属性值
Node attr = attrs.item(j);
//获取属性名
System.out.print("属性名:" + attr.getNodeName());
System.out.println("--属性值:" + attr.getNodeValue());
}
//使用getChildNodes()返回book的所有子节点的集合
NodeList childeNodes = book.getChildNodes();
System.out.println("共有" + childeNodes.getLength() + "个子节点");
//遍历子节点
for (int k = 0; k < childeNodes.getLength(); k++) {
//区分出text类型的node以及element类型的node
if (childeNodes.item(k).getNodeType()== Node.ELEMENT_NODE) {
System.out.print("第" + (k+1) + "个节点名:"
+ childeNodes.item(k).getNodeName());
//直接使用getNodeValue()时会直接输出null,因为'冰与火之歌'本身也代表一个节点, 只不过它是一个简单的TEXT节点
//所以这里要获取book子节点的子节点才能正确获取到冰与火之歌
System.out.println("--第" + (k+1) + "个节点值:"
+ childeNodes.item(k).getFirstChild().getNodeValue());
//如果子节点里面还嵌套着子节点,如:<name><a>www</a>冰与火之歌</name>,此时层级多了一层 getFirstChild().getNodeValue() 会返回null
//getTextContent()方法能够一起输出:www冰与火之歌
/* System.out.println("--第" + (k+1) + "个节点值:"
-
childeNodes.item(k).getTextContent());*/
}
}System.out.println("==================结束遍历第" + (i+1) + "本书的内容============"); System.out.println(); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
}
}