JAXP之DOM解析

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章