JAXP之DOM解析
查询 修改 删除 遍历
package cn.itcast.jaxp.dom; 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.TransformerException; import javax.xml.transform.TransformerFactory; 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; /** * /** * 使用JAXP的DOM方式解析XML 增删改查 先创建解析器工厂,用工厂生产出解析器,再用解析器解析XML文档 * * @author Lynch * */ public class DOMTest { public static void main(String[] args) throws Exception { trasver(); } /** * 查询某个节点 * * @throws ParserConfigurationException * @throws IOException * @throws SAXException */ public static void retrieve() throws ParserConfigurationException, IOException, Exception { // 创建解析器工厂 DocumentBuilderFactory docbBuilderFactory = DocumentBuilderFactory .newInstance(); // 生成解析器 DocumentBuilder dBuilder = docbBuilderFactory.newDocumentBuilder(); // 解析XML Document document = dBuilder.parse("src/book.xml"); // 获得文档树的某个节点 NodeList nodeList = document.getElementsByTagName("书名"); // 获得节点 Node node = nodeList.item(0); // 输出节点文本 System.out.println(node.getTextContent()); } /** * 添加元素 * * @throws ParserConfigurationException * @throws IOException * @throws SAXException * @throws TransformerException */ public static void addNode() throws ParserConfigurationException, SAXException, IOException, TransformerException { // 创建解析器工厂 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory .newInstance(); // 生成解析器 DocumentBuilder documentBuilder = documentBuilderFactory .newDocumentBuilder(); // 解析XML Document document = documentBuilder.parse("src/book.xml"); // 先创建一个新的节点 org.w3c.dom.Element newElement = document.createElement("作者"); newElement.setTextContent("席慕容"); // 找到要加节点的节点 Node bookNode = document.getElementsByTagName("书").item(0); // 将新节点添加到节点中 bookNode.appendChild(newElement); // 将内存中的文档树写到文件里面 TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult( "src/book.xml")); } /** * DOM方式的修改 * * @throws ParserConfigurationException * @throws IOException * @throws SAXException * @throws TransformerException */ public static void modified() throws ParserConfigurationException, SAXException, IOException, TransformerException { // 解析器工厂 DocumentBuilderFactory docFactory = DocumentBuilderFactory .newInstance(); // 解析器 DocumentBuilder dBuilder = docFactory.newDocumentBuilder(); // 解析文档 Document document = dBuilder.parse("src/book.xml"); // 找到第一本书的售价节点 Node price = document.getElementsByTagName("售价").item(0); // 修改文本 price.setTextContent("999"); // 回写文档 TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult( "src/book.xml")); } /** * 删除一节点 * * @throws ParserConfigurationException * @throws IOException * @throws SAXException * @throws TransformerException */ public static void delete() throws ParserConfigurationException, SAXException, IOException, TransformerException { // 解析器工厂 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory .newInstance(); // 解析器 DocumentBuilder dBuilder = documentBuilderFactory.newDocumentBuilder(); // 解析文档 Document document = dBuilder.parse("src/book.xml"); // 找到节点 Node author = document.getElementsByTagName("作者").item(1); // 删除节点 author.getParentNode().removeChild(author); // 回写文档 TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult( "src/book.xml")); } /** * 遍历所有节点 * * @throws ParserConfigurationException * @throws IOException * @throws SAXException */ public static void trasver() throws ParserConfigurationException, SAXException, IOException { // 解析器工厂 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory .newInstance(); // 解析器 DocumentBuilder documentBuilder = documentBuilderFactory .newDocumentBuilder(); // 解析文档 Document document = documentBuilder.parse("src/book.xml"); // 遍历 list(document); } /** * 遍历辅助函数 * @param node */ public static void list(Node node) { if (node instanceof Element) { System.out.println(node.getNodeName()); } NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node rootNode = nodeList.item(i); list(rootNode); } } }