1. 程式人生 > >Java操作XML的五種方式之DOM

Java操作XML的五種方式之DOM

1、瞭解XML

XML,即可擴充套件標記語言(Extensible Markup Language),標準通用標記語言的子集,一種用於標記電子檔案使其具有結構性的標記語言。它可以用來標記資料、定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言。 它非常適合全球資訊網傳輸,提供統一的方法來描述和交換獨立於應用程式或供應商的結構化資料。它和JSON都是一種資料交換格式。

作用:解析XML文件,建立XML文件。

2、什麼是可擴充套件標記語言?

· 可擴充套件標記語言是一種很像超文字標記語言的標記語言。

· 它的設計宗旨是傳輸資料,而不是顯示資料。

· 它的標籤沒有被預定義。您需要自行定義標籤。

· 它被設計為具有自我描述性。

· 它是W3C的推薦標準。

3、解析XML文件的五種方式: 五種方法解析XML文件:Dom、SAX、JDOM、dom4j 、degister

準備xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<languages cat="it">
    <lang id="1">
        <name>Java</name>
        <ide>Eclipse</ide>
    </lang>
    <lang id="2">
        <name>
Swift</name> <ide>Xcode</ide> </lang> <lang id="3"> <name>c#</name> <ide>Visual Studio</ide> </lang> </languages>

4、DOM

DOM的全稱是Document Object Model,也即文件物件模型。在應用程式中,基於DOM的XML分析器將一個XML文件轉換成一個物件模型的集合(通常稱DOM樹),應用程式正是通過對這個物件模型的操作,來實現對XML
文件資料的操作。通過DOM介面,應用程式可以在任何時候訪問XML文件中的任何一部分資料,因此,這種利用DOM介面的機制也被稱作隨機訪問機制。

4.1 dom讀取xml檔案

​ 讀取程式碼如下:

public void readXML() throws ParserConfigurationException, IOException, SAXException {
        //1.獲取DocumentBuilder工廠例項
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //2.獲取解析器
        DocumentBuilder builder = dbf.newDocumentBuilder();
        //3.解析檔案
        Document document = builder.parse(this.getClass().getClassLoader().getResourceAsStream("xml/languages.xml"));
        //獲取根元素
        Element root = document.getDocumentElement();
        //獲取屬性
        String cat = root.getAttribute("cat");
        System.out.println("根元素為:"+root.getNodeName()+" 屬性cat:"+cat);
        //獲取所有名字為lang的標籤
        NodeList langs = root.getElementsByTagName("lang");
        int length = langs.getLength();
        System.out.println("lang名稱的節點長度為:"+length);
        for (int i = 0; i < length; i++) {
            Node node = langs.item(i);
            //獲取下面所有的子節點
            NodeList childNodes = node.getChildNodes();
            int len = childNodes.getLength();
            System.out.println("第"+(i+1)+"個lang標籤子節點長度:"+len);//長度為5(因為含有三個回車)
            for (int j = 0; j < len; j++) {
                Node item = childNodes.item(j);
                //只對節點型別為ELEMENT_NODE的操作   回車的型別為TEXT_NODE
                if(item.getNodeType()==Node.ELEMENT_NODE){
                    System.out.println(item.getNodeName()+"="+item.getTextContent());
                }
            }
        }
    }

4.2 dom方式建立xml

建立xml程式碼如下:

public void createXml() throws ParserConfigurationException, TransformerException {
        //1.獲取DocumentBuilder工廠例項
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //2.獲取解析器
        DocumentBuilder builder = dbf.newDocumentBuilder();
        //3.獲取Document
        Document document = builder.newDocument();
        //建立節點
        Element root = document.createElement("languages");
        //建立屬性
        root.setAttribute("cat", "it");
        //建立lang
        Element lang = document.createElement("lang");
        lang.setAttribute("id", "1");
        Element name = document.createElement("name");
        name.setTextContent("java");//設定文字內容
        Element ide = document.createElement("ide");
        ide.setTextContent("Eclipse");
        //新增節點
        lang.appendChild(name);
        lang.appendChild(ide);
        root.appendChild(lang);
        document.appendChild(root);
        //輸出
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        transformer.setOutputProperty("encoding", "UTF-8");
        //寫到字串
        StringWriter out = new StringWriter();
        transformer.transform(new DOMSource(document),new StreamResult(out));
        System.out.println(out.toString());
        //寫到檔案
        transformer.transform(new DOMSource(document), new StreamResult(new File("newxml.xml")));
    }