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>

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