当前位置: 首页 > 工具软件 > JAXP > 使用案例 >

利用Jaxp实现对xml的增删改查

终安和
2023-12-01

利用Jaxp实现对xml的增删改查

  1. 创建xml文件
  2. 创建一个jaxp类
  3. 创建一个测试类
<?xml version="1.0" encoding="UTF-8" standalone="no"?><person>
    <p1>
        <name>zhangsan</name>
        <age>20</age>
        <gender>female</gender>
    <gender>male</gender></p1>
    <p1>
        <name>lisi</name>
        <age>18</age>
        <age>30</age>
    </p1>
</person>

注意写好xml的文件声明

package TestJaxp;

import org.w3c.dom.*;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.IOException;

// 实现对 xml 增删改查功能
// selectAll();
// selectSin();
// addGender();
// modifyGender();
public class Jaxp { // 利用Jaxp实现对xml的正删改查功能
    // 使用递归遍历xml的所有元素
    public static void listElement() throws Exception {
        /*
        1. 创建解释工程
        2. 创解释器
        3. 解析xml, 返回document
        4. 得到gender元素
        5. 得到gender元素的父节点
        6. 删除找出 removeChild()
        7. 回写xml
        8. 系统提示
        */
        // 1. 创建解释工厂
        DocumentBuilderFactory builderFactory  = DocumentBuilderFactory.newInstance();
        // 2. 创建解释器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        // 3. 解析xml, 返回document
        Document document = builder.parse("src/scratch.xml");
        // 调用遍历方法
        list1(document);

    }
    // 创建一个遍历方法
    public static void list1(Node node) {
        // 判断元素时候才打印
        if(node.getNodeType() == Node.ELEMENT_NODE) {
            System.out.println(node.getNodeName());
        }
        // 得到子层节点
        NodeList list = node.getChildNodes();
        // 遍历list
        for (int i = 0; i < list.getLength(); i++) {
            // 得到一个节点
            Node node1 = list.item(i);
            // 继续得到node子节点
            // node1.getChildNodes();
            list1(node1);
        }
    }

    // 删除一个具体的元素
    public static void deleteGender() throws Exception {
        /*
        1. 创建解释工程
        2. 创解释器
        3. 解析xml, 返回document
        4. 得到gender元素
        5. 得到gender元素的父节点
        6. 删除找出 removeChild()
        7. 回写xml
        8. 系统提示
        */
         // 1. 创建解释工厂
        DocumentBuilderFactory builderFactory  = DocumentBuilderFactory.newInstance();
        // 2. 创建解释器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        // 3. 解析xml, 返回document
        Document document = builder.parse("src/scratch.xml");
        // 4. 得到一个gender 得到所有所有gender,使用item方法下标得到)
        Node gender1 = document.getElementsByTagName("gender").item(0);
        // 得到gender内容
        Node p1 = gender1.getParentNode();
        // 删除操作
        p1.removeChild(gender1);
        // 回写xml
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document), new StreamResult("src/scratch.xml"));
        // 9. 系统提示
        System.out.println("Success!");

    }
    // 修改一个具体元素的内容
    public static void modifyGender() throws Exception {
        /*
        1. 创建解释工厂
        2. 创建解释器
        3. 解析xml, 返回document
        4. 得到gender ,item方法
        5. 修改gender的值 setTextContent方法
        6. 回写xml
         */
        // 1. 创建解释工厂
        DocumentBuilderFactory builderFactory  = DocumentBuilderFactory.newInstance();
        // 2. 创建解释器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        // 3. 解析xml, 返回document
        Document document = builder.parse("src/scratch.xml");
        // 4. 得到一个gender 得到所有所有gender,使用item方法下标得到)
        Node gender1 = document.getElementsByTagName("gender").item(0);
        // 修改gender内容
        gender1.setTextContent("male");
        // 回写xml
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document), new StreamResult("src/scratch.xml"));
        // 9. 系统提示
        System.out.println("Success!");


    }
    // 添加一个性别元素
    public static void addGender() throws ParserConfigurationException, IOException, SAXException, TransformerException {
        /*
        1. 创建解释工厂
        2. 创建解释器
        3. 解析xml, 返回document
        4. 得到一个p1 (得到所有所有p1,使用item方法下标得到)
        5. 创建gender标签createElement
        6. 把文本添加到gender下面的appendChild
        7. 把gender添加到一个p1下面
        8. 回写xml
        * */
        // 1. 创建解释工厂
        DocumentBuilderFactory builderFactory  = DocumentBuilderFactory.newInstance();
        // 2. 创建解释器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        // 3. 解析xml, 返回document
        Document document = builder.parse("src/scratch.xml");
        // 4. 得到一个p1 (得到所有所有p1,使用item方法下标得到)
        NodeList list = document.getElementsByTagName("p1");
        Node p1 = list.item(0);
        // 5. 创建gender标签createElement
        Element gender1 = document.createElement("gender");
        // 6. 把文本添加到gender下面的appendChild
        Text text1 = document.createTextNode("female");
        gender1.appendChild(text1);
        // 7. 把gender添加到一个p1下面
        p1.appendChild(gender1);
        // 8. 回写xml
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document), new StreamResult("src/scratch.xml"));
        // 9. 系统提示
        System.out.println("Success!");
    }

    // 查询xml中第一个name 的值
    public static void selectSin() throws ParserConfigurationException, IOException, SAXException {
        // 1. 创建解释器工厂
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        // 2. 创建解释器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        // 3. 解析xml的,返回document
        Document document = builder.parse("src/scratch.xml");
        // 4. 得到name元素
        NodeList list = document.getElementsByTagName("name");
        // 5. 使用返回集合,里面的方法item,下标获取具体元素
        Node name1 = list.item(0);
        // 6. 得到具体的值,调用getTextContent方法
        String s1 = name1.getTextContent();
        System.out.println(s1);
    }

    // 查询所有name 元素的值
    public static void selectAll() throws Exception {
        /* 查询所有name 元素的值
         *
         * 1. 创建解析器工厂
         * 2. 更具解析器工厂创建解析器
         * 3. 解析器xml反悔啊document
         * */
        // 创建解析器工厂
        DocumentBuilderFactory buildFactory = DocumentBuilderFactory.newInstance();
        // 创建解析器
        DocumentBuilder builder = buildFactory.newDocumentBuilder();
        // 解析xml返回doc文档
        Document document = builder.parse("src/scratch.xml");
        // 将name元素
        NodeList list = document.getElementsByTagName("name");
        // 遍历集合
        for (int i = 0; i < list.getLength(); i++) {
            Node name1 = list.item(i); // 得到一个name元素
            // 得到name元素里面的值
            String s = name1.getTextContent();
            System.out.println(s);
        }
    }
}

之后再创建测试类对功能进行测试

import java.io.IOException;
public class Test{
	public static void main(String[] args) throws Exception {
        Jaxp.listElement();
    }
}

经测试,所有功能都能实现。
总结:

  1. 创建一个解析工厂
  2. 创建一个解析器
  3. 解析xml,返回document
  4. 使用链表记录每个元素
  5. 实行具体操作
  6. 回写xml
 类似资料: