DOM類
- DocumentBuilder解析類,parse方法
- 虛擬接口如下:
- Node節點主接口,getChildNodes返回一個NodeList
- NodeList節點列表,每個元素是一個Node
- 實現類如下:
- Document文檔根節點
- Element標籤節點元素(每一個標籤都是標籤節點)
- Text節點(包含在XML元素內,都算Text節點)
- Attr節點(每個屬性節點)
DOM類實例:
DOM讀取XML文件
package com.torey.javaAdvanced.mooc4;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
/**
* @ClassName:DomReader
* @Description:
* @author: Torey
*/
public class DomReader {
public static void main(String[] args) {
resursiveTraverse();
traverseBySearch();
}
//使用遞歸方法,自上而下進行訪問
public static void resursiveTraverse() {
try {
//採用Dom解析xml文件
System.out.println("使用for循環,自上而下進行訪問xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("users.xml");
NodeList userLists = document.getChildNodes();
System.out.println("1111=="+userLists.getLength());//users 節點
for (int i = 0; i < userLists.getLength(); i++) {
Node users = userLists.item(i);
NodeList userList = users.getChildNodes();//獲取二級子節點user的列表
System.out.println("2222==" + userList.getLength());
for (int j = 0; j < userList.getLength(); j++) {
//到最後一級文本
Node item = userList.item(j);
if (item.getNodeType() == Node.ELEMENT_NODE) {
NodeList childNodes = item.getChildNodes();
for (int i1 = 0; i1 < childNodes.getLength(); i1++) {
Node item1 = childNodes.item(i1);
if (item1.getNodeType() == Node.ELEMENT_NODE) {
System.out.println(item1.getNodeName() + ":" + item1.getTextContent());
}
}
}
}
}
} catch (Exception ex) {
}
}
//根據名稱進行搜索,當只關注xml中某一個標籤,可以使用這種方法
public static void traverseBySearch() {
try {
System.out.println("根據名稱進行搜索:");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("users.xml");
Element rootElement = document.getDocumentElement();
//獲取所有name標籤
NodeList nodeList = rootElement.getElementsByTagName("name");
if (nodeList != null) {
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
System.out.println(element.getNodeName() + "=" + element.getTextContent());
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
users.xml
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="0">
<name>torey0</name>
<age>20</age>
<sex>男</sex>
</user>
<user id="1">
<name>torey1</name>
<age>20</age>
<sex>男</sex>
</user>
<user id="2">
<name>torey2</name>
<age>20</age>
<sex>男</sex>
</user>
<user id="3">
<name>torey3</name>
<age>20</age>
<sex>男</sex>
</user>
</users>
運行結果:
DOM寫XML文件
package com.torey.javaAdvanced.mooc4;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
/**
* @ClassName:DomWriter
* @Description:
* @author: Torey
*/
public class DomWriter {
public static void main(String[] args){
try{
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
//新創建一個Document節點
Document document = dbBuilder.newDocument();
if (document!=null) {
//採用Document創建元素 清
Element docx = document.createElement("document");
Element element = document.createElement("element");
element.setAttribute("type","pararaph");
element.setAttribute("alignment","left");
Element object = document.createElement("object");
object.setAttribute("type","text");
Element text = document.createElement("text");
//給text節點賦值
text.appendChild(document.createTextNode("abcd"));
Element bole = document.createElement("bole");
//給bold節點賦值
bole.appendChild(document.createTextNode("true")) ;
//把text節點掛在object下
object.appendChild(text);
object.appendChild(bole);
//把object節點掛在element下
element.appendChild(object);
//把element節點掛在docx下
docx.appendChild(element);
//把docx掛在document下
document.appendChild(docx);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
//定義目標文件
File file = new File("dom_text.xml");
StreamResult result = new StreamResult(file);
//將xml內容寫入到文件中
transformer.transform(source,result);
System.out.println("write xml file successfully");
}
}catch (Exception ex){}
}
}
運行結果,程序會創建dom_text.xml內容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document>
<element alignment="left" type="pararaph">
<object type="text">
<text>abcd</text>
<bole>true</bole>
</object>
</element>
</document>