DOM解析XML
package com.to.go.parse; import java.awt.event.ItemEvent; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class ParseClass { /** * 更改属性 和 添加 * @throws TransformerFactoryConfigurationError * @throws TransformerException */ public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerFactoryConfigurationError, TransformerException { // 1. 创建解析工厂 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 2. 获取解析器 DocumentBuilder db = dbf.newDocumentBuilder(); // 3. 获取document对象 Document doc = db.parse("src/main/java/com/to/go/parse/student.xml"); //获取要添加属性的节点 Node item = doc.getElementsByTagName("name").item(0); //node 类型不设置属性 要强制转为 元素类型 Element e = (Element)item; //设置属性 e.setAttribute("name_id", "id_001"); //从内存中同步到磁盘 Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.transform(new DOMSource(doc), new StreamResult("src/main/java/com/to/go/parse/student.xml")); } /** * 添加元素 * @throws TransformerFactoryConfigurationError * @throws TransformerException */ public static void main4(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerFactoryConfigurationError, TransformerException { // 1. 创建解析工厂 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 2. 获取解析器 DocumentBuilder db = dbf.newDocumentBuilder(); // 3. 获取document对象 Document doc = db.parse("src/main/java/com/to/go/parse/student.xml"); //获取要删除的节点 Node item = doc.getElementsByTagName("address").item(0); //获取该节点的父节点,从父节点中删除 item.getParentNode().removeChild(item); //从内存中同步到磁盘 Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.transform(new DOMSource(doc), new StreamResult("src/main/java/com/to/go/parse/student.xml")); } /** * 添加元素 * @throws TransformerFactoryConfigurationError * @throws TransformerException */ public static void main3(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerFactoryConfigurationError, TransformerException { // 1. 创建解析工厂 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 2. 获取解析器 DocumentBuilder db = dbf.newDocumentBuilder(); // 3. 获取document对象 Document doc = db.parse("src/main/java/com/to/go/parse/student.xml"); //创建一个节点 Element createElement = doc.createElement("address"); //设置元素内容 createElement.setTextContent("地址1"); //获取要添加的元素的父节点 Node item = doc.getElementsByTagName("student").item(0); //添加节点 item.appendChild(createElement); //从内存中同步到磁盘 Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.transform(new DOMSource(doc), new StreamResult("src/main/java/com/to/go/parse/student.xml")); } /** * 修改操作 * @throws TransformerFactoryConfigurationError * @throws TransformerException * */ public static void main2(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerFactoryConfigurationError, TransformerException { // 1. 创建解析工厂 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 2. 获取解析器 DocumentBuilder db = dbf.newDocumentBuilder(); // 3. 获取document对象 Document doc = db.parse("src/main/java/com/to/go/parse/student.xml"); //获取 age 节点 NodeList ages = doc.getElementsByTagName("age"); //获取集合中的要修改的节点 Node age = ages.item(1); //修改元素内容 age.setTextContent("18"); //从内存中同步到磁盘 Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.transform(new DOMSource(doc), new StreamResult("src/main/java/com/to/go/parse/student.xml")); // 4. 查看修改后的内容 NodeList list = doc.getElementsByTagName("age"); Node name = list.item(1); System.out.println(name.getTextContent());//18 } /** * 获取指定元素的值 */ public static void main1(String[] args) throws ParserConfigurationException, SAXException, IOException { // 1. 创建解析工厂 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 2. 获取解析器 DocumentBuilder db = dbf.newDocumentBuilder(); // 3. 获取document对象 Document doc = db.parse("src/main/java/com/to/go/parse/student.xml"); // 4. 获取具体节点内容 NodeList list = doc.getElementsByTagName("name"); Node name = list.item(1); System.out.println(name.getTextContent());//蓝色妖姬 } }
xml 文档:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- 按 alt + / 自动生成网络DTD约束 <!DOCTYPE allPerson PUBLIC "//UNKNOWN/" "unknown.dtd"> --><!-- 引入DTD约束 --><students> <student number="s001"> <name name_id="id_001">匡衡</name> <age>12</age> <sex>男</sex> </student> <student number="s002"> <name>蓝色妖姬</name> <age>18</age> <sex>女</sex> </student> </students>
DTD文档:
<?xml version="1.0" encoding="UTF-8"?> <!--<!ELEMENT students (student*)> 规定students 为根节点 子节点是 student 至少一个或多个 --> <!-- <!ELEMENT student (name,age,sex)> 规定 student 中的子元素 必须有 (name,age,sex) 而且必须按照顺序出现 --> <!-- <!ELEMENT name (#PCDATA)> name元素的中只能放文本 --> <!-- <!ATTLIST student number ID #REQUIRED> student 必须有一个属性 #REQUIRED 必选 number 是属性名 属性的类型 是 ID ID 不能重复 --> <!ELEMENT students (student*)> <!ELEMENT student (name,age,sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST student number ID #REQUIRED>
传播知识,分享快乐!
作者:IT_BULL
出处:http://www.cnblogs.com/itBulls/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
博客园-博客园。