JAXP DOM —— 增加(Create)、读取查询(Retrieve)、更新(Update)、删除(Delete)

XML数据

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book>
        <name>Java编程基础</name>
        <price>88</price>
    </book>

    <book>
        <name>Java高级应用</name>
        <price>99</price>
    </book>
</books>

解析代码

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;

/**
 * Created by Administrator on 2018/7/7 17:14 in Beijing.
 */

public class DOMTest {
    @Test
    public void demo1() throws ParserConfigurationException, IOException, SAXException {
        //构造工厂
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //通过工厂获得解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //使用解析器加载xml文档
        Document document = builder.parse("./src/main/resources/books.xml");

        NodeList nodeList = document.getElementsByTagName("name");
        for(int i = 0 ; i < nodeList.getLength() ; i++) {
            Node node = nodeList.item(i);   //这里每个 Node 都是<name></name>元素
            Element element = (Element) node;   //将节点转换为子类型节点
            System.out.println(element.getNodeName());
            System.out.println(element.getNodeType());
            System.out.println(element.getNodeValue());
            System.out.println(element.getTextContent());
            System.out.println("---------------");
        }
    }
}

输出

name
1
null
Java编程基础
---------------
name
1
null
Java高级应用
---------------

Process finished with exit code 0



读取查询(Retrieve)

    @Test
    public void demo2() throws ParserConfigurationException, IOException, SAXException {
        //构造工厂
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //通过工厂获得解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //使用解析器加载xml文档
        Document document = builder.parse("./src/main/resources/books.xml");

        NodeList nodeList = document.getElementsByTagName("name");
        for(int i = 0; i < nodeList.getLength(); i++) {
            Element name = (Element) nodeList.item(i);
            if (name.getTextContent().equals("Java编程基础")) {
                Element price = (Element) name.getNextSibling().getNextSibling();
                System.out.println("price\t"+price.getTextContent());
            }
        }
    }

输出

price   88

Process finished with exit code 0

增加(Create)

    @Test
    public void demo3() throws ParserConfigurationException, IOException, SAXException, TransformerException {
        //构造工厂
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //通过工厂获得解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //使用解析器加载xml文档
        Document document = builder.parse("./src/main/resources/books.xml");

        //添加节点
        Element newBook = document.createElement("book");
        Element newName = document.createElement("name");
        newName.setTextContent("葵花宝典");
        newBook.appendChild(newName);

        Element root = document.getDocumentElement();
        root.appendChild(newBook);

        //回写XML
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource domSource = new DOMSource(document);  //用 dom 构造数据源
        StreamResult  streamResult = new StreamResult(new java.io.File("./src/main/resources/books_bak.xml"));
        transformer.transform(domSource, streamResult);
    }

输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?><books>
    <book>
        <name>Java编程基础</name>
        <price>88</price>
    </book>

    <book>
        <name>Java高级应用</name>
        <price>99</price>
    </book>
<book><name>葵花宝典</name></book></books>

更新(Update)

    @Test
    public void demo4() throws ParserConfigurationException, IOException, SAXException, TransformerException {
        //构造工厂
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //通过工厂获得解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //使用解析器加载xml文档
        Document document = builder.parse("./src/main/resources/books.xml");

        NodeList nodeList = document.getElementsByTagName("name");
        for(int i =0 ;  i < nodeList.getLength() ; i++) {
            Element name = (Element) nodeList.item(i);
            if(name.getTextContent().equals("Java高级应用")) {
                Element price = (Element) name.getNextSibling().getNextSibling();
                double money = Double.parseDouble(price.getTextContent());
                money *= 1.2 ;
                price.setTextContent(String.valueOf(money));
            }
        }

        //回写XML
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource domSource = new DOMSource(document);  //用 dom 构造数据源
        StreamResult  streamResult = new StreamResult(new java.io.File("./src/main/resources/books_bak.xml"));
        transformer.transform(domSource, streamResult);
    }

输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?><books>
    <book>
        <name>Java编程基础</name>
        <price>88</price>
    </book>

    <book>
        <name>Java高级应用</name>
        <price>118.8</price>
    </book>
</books>

删除(Delete)

    @Test
    public void demo5() throws ParserConfigurationException, IOException, SAXException, TransformerException {
        //构造工厂
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //通过工厂获得解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //使用解析器加载xml文档
        Document document = builder.parse("./src/main/resources/books.xml");

        NodeList nodeList = document.getElementsByTagName("name");
        for(int i =0 ;  i < nodeList.getLength() ; i++) {
            Element name = (Element) nodeList.item(i);
            if(name.getTextContent().contains("Java")) {
                Element book = (Element) name.getParentNode();
                //删除必须通过父节点
                book.getParentNode().removeChild(book);
                i--;    //修复List长度
            }
        }

        //回写XML
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource domSource = new DOMSource(document);  //用 dom 构造数据源
        StreamResult  streamResult = new StreamResult(new java.io.File("./src/main/resources/books_bak.xml"));
        transformer.transform(domSource, streamResult);
    }

输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?><books>



</books>

猜你喜欢

转载自blog.csdn.net/yitengtongweishi/article/details/80953411