天天看點

使用jaxp對xml檔案進行增删改查以及周遊操作

本文通過使用jaxp的方式來實作對于xml檔案的增删改查操作,以最基礎和簡單的來做為執行個體,所操作的xml檔案為person.xml,代碼如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><person>
    <p1>
        <name>nike</name>
        <age>23</age>
    </p1>
    <p1>
        <name>tom</name>
        <age>25</age>
    </p1>
</person>
           

因為友善的關系,這裡将這些操作放在同一個java檔案中,通過函數的方式進行調用,代碼如下:

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;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class Textjaxp {

    public static void main(String[] args) throws Exception {

        //getNameValue();         //擷取xml中标的簽值
        //getSingleNameValue();   //擷取xml中某個标簽值
        //addNode();              //添加節點
        //removeNode();           //修改節點
        //deleteNode();           //删除節點
        showAllNodeName();        //周遊所有節點,使用遞歸的思想

    }



    private static void showAllNodeName() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //建立Xml解析器工廠

        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //建立Xml解析器
        Document doc = builder.parse("src/person.xml");
        //解析xml傳回document
        show(doc);

    }



    private static void show(Node node) {
        if(node.getNodeType()==Node.ELEMENT_NODE){
        System.out.println(node.getNodeName());
        }
        //判斷是否為節點
        NodeList list = node.getChildNodes();

        for(int i=;i<list.getLength();i++)
        {
            Node node1 = list.item(i);

            show(node1);//遞歸調用


        }

    }




    private static void deleteNode() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = builderFactory.newDocumentBuilder();

        Document doc = builder.parse("src/person.xml");

        NodeList list = doc.getElementsByTagName("sex");

        Node sex = list.item();

        Node parent = sex.getParentNode();

        parent.removeChild(sex);
        //xml回寫(隻要xml檔案有改動都需要回寫操作,否則結果不會改動xml檔案)
        TransformerFactory transformerFactory = TransformerFactory.newInstance();

        Transformer transformer = transformerFactory.newTransformer();

        transformer.transform(new DOMSource(doc), new StreamResult("src/person.xml"));
    }




    private static void removeNode() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = builderFactory.newDocumentBuilder();

        Document doc = builder.parse("src/person.xml");

        NodeList list = doc.getElementsByTagName("sex");

        Node sex1 = list.item();

        sex1.setTextContent("nan");

        TransformerFactory transformerFactory = TransformerFactory.newInstance();

        Transformer transformer = transformerFactory.newTransformer();

        transformer.transform(new DOMSource(doc), new StreamResult("src/person.xml"));
    }




    private static void addNode() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = builderFactory.newDocumentBuilder();

        Document document = builder.parse("src/person.xml");

        NodeList list = document.getElementsByTagName("p1");

        Node p1 = list.item();

        Element sex1 = document.createElement("sex");

        Text text1 = document.createTextNode("nv");

        sex1.appendChild(text1);

        p1.appendChild(sex1);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();

        Transformer transformer = transformerFactory.newTransformer();

        transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));

    }




    private static void getSingleNameValue() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = builderFactory.newDocumentBuilder();

        Document doc = builder.parse("src/person.xml");

        NodeList list = doc.getElementsByTagName("name");

        Node name = list.item();

        String nameValue = name.getTextContent();

        System.out.println(nameValue);      
    }




    private static void getNameValue() throws Exception {
        // TODO Auto-generated method stub
        DocumentBuilderFactory buliBuilderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = buliBuilderFactory.newDocumentBuilder();

        Document document =  builder.parse("src/person.xml");

        NodeList names = document.getElementsByTagName("name");

        for(int i =;i<names.getLength();i++)
        {
            Node name = names.item(i);

            String namevalue = name.getTextContent();

            System.out.println(namevalue);
        }
    }

}