001 |
public class DOM_Parser {
|
002 |
003 |
public static void main(String[] args) {
|
004 |
try {
|
005 |
String path = DOM_Parser.class.getClassLoader()
|
006 |
.getResource("books.xml").getPath();
|
007 |
|
008 |
// 获取文档对象
|
009 |
Document doc = getDocumentByPath(path);
|
010 |
011 |
// 遍历文档对象树(加载xml文档在内存中形成的文档对象树)
|
012 |
// 获取xml文档根元素
|
013 |
Element root = doc.getDocumentElement();
|
014 |
015 |
BookVO vo = new BookVO();
|
016 |
vo.setId("004");
|
017 |
vo.setName("JAVA未眠者");
|
018 |
// 创建一个新的book元素
|
019 |
createBookElement(doc, root, vo);
|
020 |
021 |
// 遍历元素
|
022 |
// iteratorElement(root); |
023 |
iteratorElement2(root);
|
024 |
025 |
} catch (ParserConfigurationException e) {
|
026 |
e.printStackTrace();
|
027 |
} catch (SAXException e) {
|
028 |
e.printStackTrace();
|
029 |
} catch (IOException e) {
|
030 |
e.printStackTrace();
|
031 |
}
|
032 |
}
|
033 |
034 |
/**
|
035 |
* 遍历元素
|
036 |
*
|
037 |
* @param ele
|
038 |
*/
|
039 |
private static void iteratorElement(Element ele) {
|
040 |
// 获取根元素下子元素(book元素)
|
041 |
NodeList bookNodes = ele.getChildNodes();
|
042 |
043 |
for (int i = 0; i < bookNodes.getLength(); i++) {
|
044 |
Node bookNode = bookNodes.item(i);
|
045 |
// 判断当前节点是否为元素节点
|
046 |
if (bookNode.getNodeType() == Node.ELEMENT_NODE) {
|
047 |
Element childEle = (Element) bookNode;
|
048 |
// 根据元素上的属性名获取到对应的属性值
|
049 |
if (childEle.hasAttribute("id")) {
|
050 |
System.out.print("id = " + childEle.getAttribute("id")
|
051 |
+ " ");
|
052 |
// 遍历book元素下的子元素
|
053 |
iteratorElement(childEle);
|
054 |
} else {
|
055 |
System.out.print(childEle.getNodeName() + " = "
|
056 |
+ childEle.getTextContent() + " ");
|
057 |
058 |
if ("author".equals(childEle.getNodeName())) {
|
059 |
System.out.println();
|
060 |
}
|
061 |
}
|
062 |
063 |
}
|
064 |
}
|
065 |
}
|
066 |
|
067 |
/**
|
068 |
* 通过getElementsByTagName()方法遍历文档对象树中元素
|
069 |
*
|
070 |
* @param root
|
071 |
*/
|
072 |
private static void iteratorElement2(Element root) {
|
073 |
//获取所有book元素节点
|
074 |
NodeList books = root.getElementsByTagName("book");
|
075 |
NodeList name = root.getElementsByTagName("name");
|
076 |
NodeList type = root.getElementsByTagName("type");
|
077 |
NodeList price = root.getElementsByTagName("price");
|
078 |
NodeList author = root.getElementsByTagName("author");
|
079 |
|
080 |
for (int i = 0; i < books.getLength(); i++) {
|
081 |
Element bookEle = (Element)books.item(i);
|
082 |
System.out.print("id = " + bookEle.getAttribute("id"));
|
083 |
|
084 |
Element nameEle = (Element)name.item(i);
|
085 |
System.out.print(" name = " + nameEle.getTextContent());
|
086 |
System.out.println();
|
087 |
}
|
088 |
}
|
089 |
090 |
/**
|
091 |
* 创建新的book元素对象
|
092 |
*
|
093 |
* @param doc
|
094 |
* @param root
|
095 |
*/
|
096 |
private static void createBookElement(Document doc, Element root, BookVO vo) {
|
097 |
// 向文档对象树上添加新book子元素
|
098 |
// 创建新的book元素
|
099 |
Element book = doc.createElement("book");
|
100 |
book.setAttribute("id", vo.getId());
|
101 |
102 |
// 创建book元素下的子元素
|
103 |
Element name = doc.createElement("name");
|
104 |
name.setTextContent(vo.getName());
|
105 |
Element price = doc.createElement("price");
|
106 |
Element type = doc.createElement("type");
|
107 |
Element author = doc.createElement("author");
|
108 |
109 |
// 构建元素之间层次关系
|
110 |
book.appendChild(name);
|
111 |
book.appendChild(price);
|
112 |
book.appendChild(type);
|
113 |
book.appendChild(author);
|
114 |
115 |
root.appendChild(book);
|
116 |
}
|
117 |
118 |
/**
|
119 |
* 根据xml文档路径,获取解析xml文档对应的文档对象
|
120 |
*
|
121 |
* @param path
|
122 |
* @return
|
123 |
* @throws ParserConfigurationException
|
124 |
* @throws SAXException
|
125 |
* @throws IOException
|
126 |
*/
|
127 |
private static Document getDocumentByPath(String path)
|
128 |
throws ParserConfigurationException, SAXException, IOException {
|
129 |
// 获取DOM解析器工厂对象
|
130 |
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
131 |
// 获取DOM解析器对象
|
132 |
DocumentBuilder db = dbf.newDocumentBuilder();
|
133 |
134 |
// 加载要解析xml文档
|
135 |
Document doc = db.parse(path);
|
136 |
return doc;
|
137 |
}
|
138 |
} |