XML解析之JAXP

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

public class Main {

    public static void main(String[] args) throws Exception {
        // write your code here
        //selectAll();
        //addElement();
        //modifyElement();
        //deleteElement();
        listElement();
    }

    /**
     * 解析xml文檔,並獲取文檔中元素的內容
     *
     * @throws Exception
     */
    private static void selectAll() throws Exception {
        //1.創建jaxp解析器工廠
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //2.創建解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //3.解析xml文件,獲得文檔
        Document document = builder.parse("src/person.xml");
        //4.獲取文檔中的元素
        NodeList nodeList = document.getElementsByTagName("name");
        for (int i = 0; i < nodeList.getLength(); i++) {
            System.out.println(nodeList.item(i).getTextContent());
        }
    }

    /**
     * 使用JAXP添加節點
     */
    public static void addElement() throws Exception {
        //1.創建jaxp解析器工廠
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //2.創建解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //3.解析xml文件,獲得文檔
        Document document = builder.parse("src/person.xml");
        //4.獲取文檔中的元素
        NodeList nodeList = document.getElementsByTagName("p1");
        //5.獲取想要插入節點的父節點
        Node p1 = nodeList.item(0);
        //6.創建添加的元素
        Element element = document.createElement("sex");
        //7.添加元素的內容
        Text text = document.createTextNode("nan");
        element.appendChild(text);
        p1.appendChild(element);
        //8.回寫到文件中
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
    }

    /**
     * 使用JAXP修改節點
     */
    public static void modifyElement() throws Exception {
        //1.創建jaxp解析器工廠
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //2.創建解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //3.解析xml文件,獲得文檔
        Document document = builder.parse("src/person.xml");
        //4.獲取文檔中的元素
        Node node = document.getElementsByTagName("sex").item(0);
        //5.修改
        node.setTextContent("nv");
        //6.回寫到文件中
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
    }

    /**
     * 使用JAXP刪除節點
     */
    public static void deleteElement() throws Exception {
        //1.創建jaxp解析器工廠
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //2.創建解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //3.解析xml文件,獲得文檔
        Document document = builder.parse("src/person.xml");
        //4.獲取文檔中的元素
        Node delNode = document.getElementsByTagName("sex").item(0);
        //5.獲取想要插入節點的父節點
        Node parentNode = delNode.getParentNode();
        //6.刪除
        parentNode.removeChild(delNode);
        //7.回寫到文件中
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
    }


    /**
     * 使用jaxp遍歷xml文檔中的節點(遞歸方法)
     * @throws Exception
     */
    public static void listElement() throws Exception{
        //1.創建jaxp解析器工廠
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //2.創建解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //3.解析xml文件,獲得文檔
        Document document = builder.parse("src/person.xml");
        //4.遞歸遍歷
        list(document);
    }

    /**
     * 遞歸遍歷節點的孩子節點
     * @param node
     */
    private static void list(Node node) {
        if(node.getNodeType() == Node.ELEMENT_NODE){
            System.out.println(node.getNodeName());
        }
        //得到第一層節點
        NodeList nodeList = node.getChildNodes();
        for (int i = 0; i < nodeList.getLength(); i++){
            //得到每個節點
            Node chlidNode = nodeList.item(i);
            list(chlidNode);
        }
    }
}

 

發佈了17 篇原創文章 · 獲贊 3 · 訪問量 1009
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章