java解析XML文件

110 阅读3分钟
  1. 获取节点
import org.w3c.dom.Document;
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;

public class DOMTest {
    public static void main(String[] args) {
        //1.准备工作
        //创建一个DocumentBuilderFactory对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            //创建一个DocumentBuilder对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            //通过DocumentBuilder对象的parse方法加载xml文件到项目
            Document document = db.parse("src/main/java/test/books.xml");
            //获取<name>节点
            NodeList nodeList = document.getElementsByTagName("name");
            //获取第一个<name>节点
            Node node = nodeList.item(0);
            //获取节点的内容
            String name = node.getTextContent();
            System.out.println(name);
        }catch (ParserConfigurationException e){
            e.printStackTrace();
        }catch (SAXException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
  1. 修改节点
import org.w3c.dom.Document;
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 javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
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;

public class DOMTest02 {
    public static void main(String[] args) {
        //1.准备工作
        //创建一个DocumentBuilderFactory对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            //创建一个DocumentBuilder对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            //通过DocumentBuilder对象的parse方法加载xml文件到项目
            Document document = db.parse("src/main/java/test/books.xml");
            //获取<name>节点
            NodeList nodeList = document.getElementsByTagName("name");
            //获取第一个<name>节点
            Node node = nodeList.item(0);
            //修改节点的内容
            node.setTextContent("西游记");
            //从内存写到文档同步操作
            Transformer tf = TransformerFactory.newInstance().newTransformer();
            tf.transform(new DOMSource(document),new StreamResult("src/main/java/test/books.xml"));
        }catch (ParserConfigurationException e){
            e.printStackTrace();
        }catch (SAXException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }catch (TransformerConfigurationException e){
            e.printStackTrace();
        }catch (TransformerException e) {
            e.printStackTrace();
        }
    }
}
  1. 添加节点元素
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
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;

public class DOMTest03 {
    public static void main(String[] args) {
        //1.准备工作
        //创建一个DocumentBuilderFactory对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            //创建一个DocumentBuilder对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            //通过DocumentBuilder对象的parse方法加载xml文件到项目
            Document document = db.parse("src/main/java/test/books.xml");
            //创建节点
            Element addrEle = document.createElement("address");
            //设置节点内容
            addrEle.setTextContent("CHINA");
            //获取添加节点的父节点
            Node node = document.getElementsByTagName("book").item(0);
            //添加节点
            node.appendChild(addrEle);
            //从内存写到文档同步操作
            Transformer tf = TransformerFactory.newInstance().newTransformer();
            tf.transform(new DOMSource(document),new StreamResult("src/main/java/test/books.xml"));
        }catch (ParserConfigurationException e){
            e.printStackTrace();
        }catch (SAXException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }catch (TransformerException e){
            e.printStackTrace();
        }
    }
}
  1. 删除节点元素
import org.w3c.dom.Document;
import org.w3c.dom.Node;
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;

public class DOMTest04 {
    public static void main(String[] args) {
        //1.准备工作
        //创建一个DocumentBuilderFactory对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            //创建一个DocumentBuilder对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            //通过DocumentBuilder对象的parse方法加载xml文件到项目
            Document document = db.parse("src/main/java/test/books.xml");
            //获取节点
            Node node = document.getElementsByTagName("author").item(0);
            //获取父节点
            node.getParentNode().removeChild(node);
            //从内存写到文档同步操作
            Transformer tf = TransformerFactory.newInstance().newTransformer();
            tf.transform(new DOMSource(document),new StreamResult("src/main/java/test/books.xml"));
        }catch (ParserConfigurationException e){
            e.printStackTrace();
        }catch (SAXException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }catch (TransformerException e){
            e.printStackTrace();
        }
    }
}
  1. 添加元素属性
//1.准备工作
                //创建一个DocumentBuilderFactory对象
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                try {
                    //创建一个DocumentBuilder对象
                    DocumentBuilder db = dbf.newDocumentBuilder();
                    //通过DocumentBuilder对象的parse方法加载xml文件到项目
                    Document document = db.parse("src/main/java/test/books.xml");
                    //获取节点
                    Node node = document.getElementsByTagName("author").item(0);
                    //获取节点强制转换为element
                    Element ele = (Element) node;
                    //设置属性
                    ele.setAttribute("ID","001");
                    //从内存写到文档同步操作
                    Transformer tf = TransformerFactory.newInstance().newTransformer();
                    tf.transform(new DOMSource(document),new StreamResult("src/main/java/test/books.xml"));
                }catch (ParserConfigurationException e){
                    e.printStackTrace();
                }catch (SAXException e){
                    e.printStackTrace();
                }catch (IOException e){
                    e.printStackTrace();
                }catch (TransformerException e){
                    e.printStackTrace();
                }
  1. xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?><bookstore>
    <book id="1">
        <name>冰与火之歌</name>
        <year>2014</year>
        <price>89</price>
    </book>
    <book id="2">
        <name>安徒生童话</name>
        <year>2004</year>
        <price>77</price>
        <language>English</language>
    </book>
</bookstore>
  1. JAVA生成xml文件
//1.通过文档帮助器,创建一个文档对象
        Document doc = DocumentHelper.createDocument();
        //2.给文档对象(dom树)添加第一个节点(根节点)
        Element books = doc.addElement("books");
        //3.通过根节点,丰富子节点
        //  创建100个book子节点,每个子节点又包含name和info两个子节点
        for (int i = 0; i < 100; i++) {
            Element book = books.addElement("book");//添加books子节点
            book.addAttribute("id",100+i+"");//设置属性
            Element name = book.addElement("name");//添加book子节点
            name.setText(i+"斗罗大陆");
            Element info = book.addElement("info");
            info.setText("每周更新第"+i+"集");
        }
        //4.将写好的xml文档写入到本地文件
        //4.1.创建一个指向xml的文件输出流(即封装路径并创建文件)
        FileOutputStream fos = new FileOutputStream("src/Book.xml");
        //4.2.将文件输出流转成(装饰)xml输出流
        XMLWriter xw = new XMLWriter(fos);
        //4.3.写出文档
        xw.write(doc);
        //5.释放资源
        xw.close();
        System.out.println("执行完毕");
  1. dom4j解析 dom4j.github.io/
  2. SAX解析 www.cnblogs.com/Nyan-Workfl…