微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jaxp解析xml 对xml文件进行增删改查

Demo.java实现了5个功能
1. 读取某个标签的值
2. 打印所有xml标签
3. 获得某个标签的指定属性
4. 在指定节点后面增加标签
5. 给指定节点增加属性

删除功能增加差不多,只是用了不同的方法,本人就没有具体代码实现

book.xml

<?xml version="1.0" encoding="UTF-8"?>
<书架>
    <>
        <书名 name="base">Java基础</书名>
        <作者>abc</作者>
        <售价> 39.00元</售价>
    </>

    <>
        <书名>Java进阶</书名>
        <作者>abc</作者>
        <售价> 88.88元</售价>
    </>
</书架>

Demo.java

package learn.java.xml;

import java.io.FileOutputStream;

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 org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

// 用Jaxp解析xml
public class Demo {
    public static void main(String[] args) throws Exception {
        Demo demo = new Demo();
        demo.read();
        System.out.println("**********");
        demo.readAll();
        System.out.println("**********");
        demo.readAttr();


        // 添加
        demo.add();
        demo.setAttr();
    }

    // 读取第二本书的书名 Java进阶
    public void read() throws Exception {
        // 1.创建工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 2.得到Dom解析器
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 3.解析xml文档
        Document doc = builder.parse("src/book.xml");
        NodeList list = doc.getElementsByTagName("书名");

        Node node = list.item(1); // 第二本书的书名 Java进阶
        String text = node.getTextContent();
        System.out.println(text);

    }

    // 打印所有标签
    public void readAll() throws Exception {
        // 1.创建工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 2.得到Dom解析器
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 3.解析xml文档
        Document doc = builder.parse("src/book.xml");
        // 得到根节点
        Node root = doc.getElementsByTagName("书架").item(0);
        list(root);
    }

    // 遍历所有节点
    public void list(Node node) throws Exception {
        if (node instanceof Element) { // 是标签类型,打印(有些节点不是标签)
            System.out.println(node.getNodeName());
        }
        NodeList nodes = node.getChildNodes();
        for (int i = 0; i < nodes.getLength(); i++)
            list(nodes.item(i));
    }

    // 获得某个标签的指定属性
    public void readAttr() throws Exception {
        // 1.创建工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 2.得到Dom解析器
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 3.解析xml文档
        Document doc = builder.parse("src/book.xml");
        // 得到根节点
        Node node = doc.getElementsByTagName("书名").item(0);
        // Node类没有提供获得指定标签方法
        // 需要强制转换成Element(Node子类),它有获得指定属性方法
        Element elem = (Element) node;
        String value = elem.getAttribute("name");
        System.out.println(value);
    }

    // 在指定位置后面添加标签
    public void add() throws Exception {
        // 1.创建工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 2.得到Dom解析器
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 3.解析xml文档
        Document doc = builder.parse("src/book.xml");
        // 创建节点
        Element discount = doc.createElement("打折");
        discount.setTextContent("9折");

        // 把新节点挂到第一本书的"售价"标签之前上
        Element book = (Element)doc.getElementsByTagName("书").item(0);
        Node nodeBef = doc.getElementsByTagName("售价").item(0);
        book.insertBefore(discount,nodeBef);  // 前面节点 插到 后面节点 的 后面

        // 保存到文件
        TransformerFactory tfFactory = TransformerFactory.newInstance();
        Transformer tf = tfFactory.newTransformer();
        tf.transform(new DOMSource(doc),new StreamResult(new FileOutputStream("src/book.xml")));

    }

    // 添加标签属性
    public void setAttr() throws Exception {
        // 1.创建工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 2.得到Dom解析器
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 3.解析xml文档
        Document doc = builder.parse("src/book.xml");

        // 把新节点挂到第一本书的"售价"标签之前上
        Element book = (Element)doc.getElementsByTagName("书名").item(1);
        book.setAttribute("name","advanced");

        // 保存到文件
        TransformerFactory tfFactory = TransformerFactory.newInstance();
        Transformer tf = tfFactory.newTransformer();
        tf.transform(new DOMSource(doc),new StreamResult(new FileOutputStream("src/book.xml")));

    }
}

原文地址:https://www.jb51.cc/xml/296039.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。