Dom4j解析xml

xiaoxiao2021-02-28  27

DOM4J(Document Object Model for Java)

简单易用,采用Java集合框架,并完全支持DOM、SAX和JAXP。

应用非常广泛,目前许多开源项目中大量采用DOM4J,如无特殊要求,建议考虑使用dom4j优点:1、大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。2、支持XPath。3、有很好的性能。缺点:

1、大量使用了接口,API较为复杂。

一 创建一个工程

1.首先需要倒入相关jar  dom4j-2.0.0-RC1.jar

实现对xml进行读取

创建readXml类

package com.dom4j; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; public class ReadXml { /** * 读取xml文件 * @throws Exception */ @Test public void readXMLDemo() throws Exception { // 创建saxReader对象 SAXReader reader = new SAXReader(); // 通过read方法读取一个文件 转换成Document对象 Document document = reader.read(new File("book.xml")); //获取根节点元素对象 Element node = document.getRootElement(); //遍历所有的元素节点 listNodes(node); //elementMethod(node); } /** * 遍历当前节点元素下面的所有(元素的)子节点 * @param node */ public void listNodes(Element node) { System.out.println("当前节点的名称::" + node.getName()); // 获取当前节点的所有属性节点 List<Attribute> list = node.attributes(); // 遍历属性节点 for (Attribute attr : list) { System.out.println(attr.getText() + "-----" + attr.getName() + "---" + attr.getValue()); } if (!(node.getTextTrim().equals(""))) { System.out.println("文本内容::::" + node.getText()); } // 当前节点下面子节点迭代器 Iterator<Element> it = node.elementIterator(); // 遍历 while (it.hasNext()) { // 获取某个子节点对象 Element e = it.next(); // 对子节点进行遍历 listNodes(e); } } /** * 介绍Element中的element方法和elements方法的使用 * @param node */ public void elementMethod(Element node) { // 获取node节点中,子节点的元素名称为bookStore的元素节点。 Element e = node.element("book"); // 获取bookStore元素节点中,子节点为book的元素节点(可以看到只能获取第一个carname元素节点) // Element carname = e.element("title"); // 获取book这个元素节点 中,所有子节点名称为title元素的节点 。 // List<Element> carnames = e.elements("title"); // for (Element cname : carnames) { // System.out.println(cname.getText()); // } // 获取book这个元素节点 所有元素的子节点。 List<Element> elements = e.elements(); for (Element el : elements) { System.out.println(el.getName()); System.out.println(el.getText()); System.out.println("==============="); } } }

2.把xml数据写入到xml文件中

package com.dom4j; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; public class writerXml { /** * 数据写入到xml文件 * @throws Exception */ @Test public void createXMLDemo() throws Exception { //获取Document对象 Document document = DocumentHelper.createDocument(); //获取xml文件的根路径 Element root = document.addElement("bookStore"); //通过根路径添加子元素 Element element= root.addElement("book"); //向book元素中添加属性与属性值 /** * addAttribute 指的是当前节点的属性与方法 * addElement book节点下子节点的名称 * addText book节点下子节点的值 */ element.addAttribute("id","1"); element.addElement("title").addAttribute("lang", "en").addText("《Java编程思想》"); element.addElement("author").addAttribute("lang", "en").addText("编程语言的骄子"); element.addElement("price").addAttribute("lang", "en").addText("200"); Element element1= root.addElement("book"); //向book元素中添加属性与属性值 /** * addAttribute 指的是当前节点的属性与方法 * addElement book节点下子节点的名称 * addText book节点下子节点的值 */ element1.addAttribute("id","2"); element1.addElement("title").addAttribute("lang", "en").addText("《Java编程思想》"); element1.addElement("author").addAttribute("lang", "en").addText("编程语言的骄子"); element1.addElement("price").addAttribute("lang", "en").addText("200"); // 写入到一个新的文件中 writer(document); } /** * 把document对象写入新的文件 * @param document * @throws Exception */ public void writer(Document document) throws Exception { // 紧凑的格式 // OutputFormat format = OutputFormat.createCompactFormat(); // 排版缩进的格式 OutputFormat format = OutputFormat.createPrettyPrint(); // 设置编码 format.setEncoding("UTF-8"); // 创建XMLWriter对象,指定了写出文件及编码格式 // XMLWriter writer = new XMLWriter(new FileWriter(new // File("a.xml")),format); XMLWriter writer = new XMLWriter(new OutputStreamWriter( new FileOutputStream(new File("book.xml")),"UTF-8"), format); writer.setEscapeText(false); // 写入 writer.write(document); // 立即写入 writer.flush(); // 关闭操作 writer.close(); }

对xml文件进行修改相关节点与节点的属性

package com.dom4j; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; public class UpdateXml { /** * 修改属性 */ @Test public void update() { try { // 创建saxReader对象 SAXReader reader = new SAXReader(); // 通过read方法读取一个文件 转换成Document对象 Document document = reader.read(new File("book.xml")); // 获取根节点元素对象 Element node = document.getRootElement(); Attribute attributes = node.element("book").element("title").attribute("lang"); attributes.setText("1"); Attribute id = node.element("book").attribute("id"); id.setText("10"); //xml文件内容的样式 OutputFormat format = OutputFormat.createPrettyPrint(); // 创建XMLWriter对象,指定了写出文件及编码格式 XMLWriter writer = new XMLWriter( new OutputStreamWriter(new FileOutputStream(new File("book.xml")), "UTF-8"), format); writer.write(document); writer.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 向指定位置添加属性 */ @Test public void addElement() { try { SAXReader reader = new SAXReader(); Document document = reader.read("book.xml"); // 加载xml Element desc = DocumentHelper.createElement("desc"); // 创建新的节点 desc.setText("新增加的属性"); // 设置节点值 List<Element> root = document.getRootElement().elements(); System.out.println(root.size()); for (int i = 0; i < root.size(); i++) { if (i == 1) { List<Element> elements = root.get(1).elements(); elements.add(0, desc); // elements.remove(0); } } // Element root = document.getRootElement(); // List<Element> list = root.element("book").elements(); // list.add(1, desc); // 排版缩进的格式 OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new OutputStreamWriter( new FileOutputStream(new File("book.xml")),"UTF-8"), format); // 写入 writer.write(document); // 立即写入 writer.flush(); // 关闭操作 writer.close(); System.out.println("添加完成"); } catch (Exception e) { e.printStackTrace(); } } }
转载请注明原文地址: https://www.6miu.com/read-2630179.html

最新回复(0)