DOM:(document object model)文档对象模型
使用DOM解析器读取xml文件,并在内存中生成DOM树。xml文件中的标签、文本、属性都是树中的节点。子标签解析出的节点、父标签的文本节点和父标签的属性节点均是父标签的节点的孩子。
JAXP开发包
JAXP开发包是J2SE的一部分,它由javax.xml、org.w3c.dom、org.xml.sax包及其子包组成。
使用DOM方式解析XML文件,以下为xml文档内容
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<books>
<book category="科技">
<name>计算机组成原理</name>
<author>james</author>
<price>34</price></book>
<book category="生活">
<name>知音</name>
<author>不详</author>
<price>13</price>
</book>
<book category="军事">
<name>雷达科普</name>
<author>不详</author>
<price>78</price>
</book>
</books>
<book category="科技">
<name>计算机组成原理</name>
<author>james</author>
<price>34</price></book>
<book category="生活">
<name>知音</name>
<author>不详</author>
<price>13</price>
</book>
<book category="军事">
<name>雷达科普</name>
<author>不详</author>
<price>78</price>
</book>
</books>
1、读取XML文件
<pre name="code" class="java"><pre name="code" class="java"><span style="font-size:18px;">import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public static void read() throws ParserConfigurationException, SAXException, IOException {
//1.得到解析器工厂对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//2.得到解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
//3.使用解析器解析xml文件得到代表整个文档的Document对象
Document document = builder.parse(new File("src/book.xml"));
//4.得到指定名字的标签,由于此名字标签有多个,所以需要用NodeList对象保存
NodeList list = document.getElementsByTagName("price");
//5.得到此标签的第1个,一定导入org.w3c.dom.Node
Node node = list.item(0);
//6.读取此标签的内容
String price = node.getTextContent();
}</span>
2、在XML文件中增加标签
<span style="font-size:18px;">public void add() throws TransformerException, SAXException, IOException, ParserConfigurationException{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("src/book.xml"));
//1、创建要增加标签的Element对象,此为父标签book
Element book = document.createElement("book");
//子标签name
Element name = document.createElement("name");
//设置子标签name的值
name.setTextContent("高等数学");
//子标签
Element author = document.createElement("author");
author.setTextContent("不详");
//子标签
Element price = document.createElement("price");
price.setTextContent("35");
//父标签关联子标签
book.appendChild(name);
book.appendChild(author);
book.appendChild(price);
//添加属性
book.setAttribute("category", "教育");
//把父标签book关联到books上
document.getElementsByTagName("books").item(0).appendChild(book);
//把内存中的Document写入到文件中
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new File("src/book.xml")));
}</span>
3、删除指定标签
<span style="font-size:18px;">public void delete() throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("src/book.xml"));
//得到要删除标签的父标签
Node books = document.getElementsByTagName("books").item(0);
//得到要删除的标签
Node book = document.getElementsByTagName("book").item(0);
//删除要删除的标签
books.removeChild(book);
//写入文件中
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new File("src/book.xml")));
}</span>
4、更新标签
<span style="font-size:18px;">public void update() throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("src/book.xml"));
Element book = (Element) document.getElementsByTagName("book").item(2);
book.setAttribute("category", "数学");
//写入文件中
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new File("src/book.xml")));
}</span>