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); } } }