> 文档中心 > Java dom4j生成和解析XML

Java dom4j生成和解析XML

使用方式:在pom.xml中导入dom4j对应的jar

    dom4j    dom4j    1.6.1

优点:dom4j使Java生成和解析XML灵活性变高,并且代码易于维护

API操作类:

Document:表示xml文档信息,是一个树形结构

Eelment:表示xml的元素结点,提供一些操作其子元素方法的,如文本、属性、名称空间等

Attribute:表示元素结点中的属性

上代码:

import org.dom4j.*;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import java.io.File;import java.io.FileOutputStream;import java.util.Iterator;import java.util.List;public class Dom4jTest {    public static void main(String[] args)  throws Exception { Document res = creatXML(); System.out.println(res.asXML()); System.out.println("========================================="); Document document = ParsingXML(); System.out.println(document.asXML()); System.out.println("========================================="); // 递归打印xml文档信息 StringBuffer buffer = new StringBuffer(); parseElement(document.getRootElement(), buffer); System.out.println(buffer.toString());    }    //生成XML    public static Document creatXML() throws Exception { //第一步:创建一个Document实例 Document document= DocumentHelper.createDocument();//创建xml文档 //第二步:先添加一个根结点,然后再添加子结点,构造成一个树形结构 Element root=document.addElement("WLLINKED");//创建根元素 //第三步:添加xml文件样式(也可自定义样式),并输出xml文件到指定的路径下 // 在根节点下添加第一个子节点 Element oneChildElement= root.addElement("HEAD").addAttribute("pro", "head name"); oneChildElement.addElement("TYPE").addText("TMS_WH_NODE_RECORD_SERVICE_ASYNC"); oneChildElement.addElement("SENDER").addText("56linked"); oneChildElement.addElement("CODE").addText("LJYS"); oneChildElement.addElement("DATE").addText("20190611215406146600191"); oneChildElement.addElement("INVOKE_UNIKEY"); // 在根节点下添加第二个子节点 Element twoChildElement= root.addElement("XML_DATA").addAttribute("pro", "DATA"); twoChildElement.addElement("WAREHOUSE_CODE").addText("仓库编码"); twoChildElement.addElement("WAREHOUSE_NAME").addText("仓库名称"); twoChildElement.addElement("STOWAGE_NO").addText("调度单号"); twoChildElement.addElement("LEGNO").addText("客户单号"); twoChildElement.addElement("WH_NODE_NAME").addText("仓库节点名称"); twoChildElement.addElement("OPERATOR_NAME").addText("操作人员名称"); twoChildElement.addElement("KPI_TIME").addText("2022-09-09 12:33:00"); OutputFormat format = new OutputFormat(); format.setIndentSize(2);  // 行缩进 format.setNewlines(true); // 一个结点为一行 format.setTrimText(true); // 去重空格 format.setPadText(true); format.setNewLineAfterDeclaration(false); // 放置xml文件中第二行为空白行 //System.out.println(document.asXML()); // 输出xml文件 XMLWriter writer = new XMLWriter(new FileOutputStream(new File("E:\\dom4j.xml")), format); writer.write(document); System.out.println("dom4j CreateDom4j success!"); return document;    }    //Parsing XML    //解析XML    //读取XML    //SAXReader可以通过多种方式读取xml数据,并返回Document格式的对象。    //通过查看源码,可以看出read()方法接收File,InputStream和URL等格式的参数来读取相应的xml数据。    public static Document ParsingXML() { Document document = null; try {     //创建解析器 第一步:创建一个SAXReader解析器     SAXReader reader=new SAXReader();//创建读取文件内容对象     //第二步:解析xml文件,重新构建成一个Document对象,转换成Document结点     document=reader.read(new File("E:\\dom4j.xml"));//指定文件并读取 } catch (DocumentException e) {     e.printStackTrace(); } return document;    }    public static void parseElement(Element element, StringBuffer buffer) { buffer.append("<"+element.getName()); List attrs = element.attributes(); if (attrs != null) {     for (Attribute attr : attrs) {  buffer.append(" "+attr.getName()+"=\""+attr.getValue()+"\"");     } } buffer.append(">"); Iterator iterator = element.nodeIterator(); while (iterator.hasNext()) {     Node node = iterator.next();     if (node instanceof Element) {  Element eleNode = (Element) node;  parseElement(eleNode, buffer);     }     if (node instanceof Text) {  Text text = (Text) node;  buffer.append(text.getText());     }     if (node instanceof CDATA) {  CDATA dataNode = (CDATA) node;  buffer.append(dataNode.getText());     }     if (node instanceof Comment) {  Comment comNode = (Comment) node;  buffer.append(comNode.getText());     } } buffer.append("");    }}