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>