xml解析-DOM類

DOM類

  • DocumentBuilder解析類,parse方法
  • 虛擬接口如下:
    • Node節點主接口,getChildNodes返回一個NodeList
    • NodeList節點列表,每個元素是一個Node
  • 實現類如下:
    • Document文檔根節點
    • Element標籤節點元素(每一個標籤都是標籤節點)
    • Text節點(包含在XML元素內,都算Text節點)
    • Attr節點(每個屬性節點)

DOM類實例:

DOM讀取XML文件

package com.torey.javaAdvanced.mooc4;

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

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

/**
 * @ClassName:DomReader
 * @Description:
 * @author: Torey
 */
public class DomReader {
    public static void main(String[] args) {
        resursiveTraverse();
        traverseBySearch();
    }

    //使用遞歸方法,自上而下進行訪問
    public static void resursiveTraverse() {
        try {
            //採用Dom解析xml文件
            System.out.println("使用for循環,自上而下進行訪問xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document document = db.parse("users.xml");
            NodeList userLists = document.getChildNodes();
            System.out.println("1111=="+userLists.getLength());//users 節點
            for (int i = 0; i < userLists.getLength(); i++) {
                Node users = userLists.item(i);
                NodeList userList = users.getChildNodes();//獲取二級子節點user的列表
                System.out.println("2222==" + userList.getLength());
                for (int j = 0; j < userList.getLength(); j++) {
                    //到最後一級文本
                    Node item = userList.item(j);
                    if (item.getNodeType() == Node.ELEMENT_NODE) {
                        NodeList childNodes = item.getChildNodes();
                        for (int i1 = 0; i1 < childNodes.getLength(); i1++) {
                            Node item1 = childNodes.item(i1);
                            if (item1.getNodeType() == Node.ELEMENT_NODE) {
                                System.out.println(item1.getNodeName() + ":" + item1.getTextContent());
                            }
                        }
                    }
                }
            }
        } catch (Exception ex) {

        }
    }
    //根據名稱進行搜索,當只關注xml中某一個標籤,可以使用這種方法
    public static void traverseBySearch() {
        try {
            System.out.println("根據名稱進行搜索:");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document document = db.parse("users.xml");
            Element rootElement = document.getDocumentElement();
            //獲取所有name標籤
            NodeList nodeList = rootElement.getElementsByTagName("name");
            if (nodeList != null) {
                for (int i = 0; i < nodeList.getLength(); i++) {
                    Element element = (Element) nodeList.item(i);
                    System.out.println(element.getNodeName() + "=" + element.getTextContent());
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

users.xml

<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="0">
    <name>torey0</name>
    <age>20</age>
    <sex></sex>
</user>
    <user id="1">
        <name>torey1</name>
        <age>20</age>
        <sex></sex>
    </user>
    <user id="2">
        <name>torey2</name>
        <age>20</age>
        <sex></sex>
    </user>
    <user id="3">
        <name>torey3</name>
        <age>20</age>
        <sex></sex>
    </user>
</users>

運行結果:
在這裏插入圖片描述

DOM寫XML文件

package com.torey.javaAdvanced.mooc4;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

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 java.io.File;

/**
 * @ClassName:DomWriter
 * @Description:
 * @author: Torey
 */
public class DomWriter {
    public static void main(String[] args){
        try{
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
            //新創建一個Document節點
            Document document = dbBuilder.newDocument();
            if (document!=null) {
                //採用Document創建元素 清
                Element docx = document.createElement("document");
                Element element = document.createElement("element");
                element.setAttribute("type","pararaph");
                element.setAttribute("alignment","left");

                Element object = document.createElement("object");
                object.setAttribute("type","text");

                Element text = document.createElement("text");
                //給text節點賦值
                text.appendChild(document.createTextNode("abcd"));
                Element bole = document.createElement("bole");
                //給bold節點賦值
                bole.appendChild(document.createTextNode("true")) ;

                //把text節點掛在object下
                object.appendChild(text);
                object.appendChild(bole);
                //把object節點掛在element下
                element.appendChild(object);
                //把element節點掛在docx下
                docx.appendChild(element);
                //把docx掛在document下
                document.appendChild(docx);

                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                DOMSource source = new DOMSource(document);
                //定義目標文件
                File file = new File("dom_text.xml");
                StreamResult result = new StreamResult(file);
                //將xml內容寫入到文件中
                transformer.transform(source,result);
                System.out.println("write xml file successfully");
            }
        }catch (Exception ex){}
    }
}

運行結果,程序會創建dom_text.xml內容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document>
    <element alignment="left" type="pararaph">
        <object type="text">
            <text>abcd</text>
            <bole>true</bole>
        </object>
    </element>
</document>

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