使用dom4j创建和解析xml文件

使用dom4j创建和解析xml文件

  在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j。

下面我就以代码来讲解一下如何使用dom4j来创建xml文件。

1.项目结构

在这里我们要,引入dom4j中的两个jar包,分别是:

dom4j-1.6.1;

jaxen-1.1-beta-6;

2.简要介绍

  >创建xml 的主要类 DocumentHelper
  document = DocumentHelper.createDocument();

  >写入文件的主要类XMLWriter
  >格式化xml的辅助类OutputFormat
  OutputFormat format = OutputFormat.createPrettyPrint();
  writer = new XMLWriter(new FileWriter(filepath), format);

  >格式化输出 OutputFormat  相应的还有createCompactFormat() 创建压缩的xml文件,删去了所有的换行等无用的字符。createPrettyPrint() 则是生成格式化的xml 代码,让看起来好读一点。

3.实例

下面以代码来详细讲解,注释很清楚。

代码清单【1】XmlUtils.java

  1 package com.lxf.xmlUtils;
  2
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.io.FileOutputStream;
  6 import java.io.IOException;
  7 import java.io.InputStream;
  8 import java.io.OutputStreamWriter;
  9 import java.util.List;
 10 import java.util.Properties;
 11 import java.util.UUID;
 12
 13 import org.dom4j.Attribute;
 14 import org.dom4j.Document;
 15 import org.dom4j.DocumentException;
 16 import org.dom4j.DocumentHelper;
 17 import org.dom4j.Element;
 18 import org.dom4j.io.OutputFormat;
 19 import org.dom4j.io.SAXReader;
 20 import org.dom4j.io.XMLWriter;
 21
 22
 23 /**
 24  * 使用dom4j生成和解析xml文件
 25  * @author Administrator
 26  *2016/12/05
 27  */
 28 public class XmlUtils
 29 {
 30     private static final XmlUtils INSTANCE = new XmlUtils();
 31
 32     private static final String UU_STRING = UUID.randomUUID().toString().substring(0, 5);
 33     private static final String FILEBASEPATH = getPropertiesInfo("filepath") +"\\"+ UU_STRING + ".xml" ;
 34
 35     public static XmlUtils getInstance()
 36     {
 37         return INSTANCE;
 38     }
 39
 40
 41     /**
 42      * 1.使用dom4j创建xml文档对象
 43      */
 44     public static Document createDocument()
 45     {
 46         /*
 47          * 1.使用DocumentHelper创建文档对象.
 48          */
 49         Document document = DocumentHelper.createDocument();
 50         /*
 51          * 2.创建根节点
 52          */
 53         Element root = DocumentHelper.createElement("message");
 54         document.setRootElement(root);
 55         /*
 56          * 3.为根节点设置一级节点
 57          */
 58         Element element1 = root.addElement("name");
 59         element1.setText("java");
 60
 61         Element element2 = root.addElement("age");
 62         element2.setText("23");
 63         /*
 64          * 为一级节点设置子节点
 65          */
 66         Element element3 = root.addElement("address");
 67         Element element31 = element3.addElement("id");
 68         element31.setText("1");
 69         Element element32 = element3.addElement("province");
 70         element32.setText("北京市");
 71         Element element33 = element3.addElement("street");
 72         element33.setText("长安街");
 73         /*
 74          *4.为节点设置属性
 75          */
 76         root.setAttributeValue("version", "2.0");
 77         element1.setAttributeValue("kind", "book");
 78
 79         return document;
 80
 81     }
 82
 83     /**
 84      * 2.使用dom4j创建输出xml文件
 85      */
 86     public static void createXml()
 87     {
 88         /*
 89          * 1.创建文档对象
 90          */
 91         Document document = createDocument();
 92         //生成的xml文件存放路径
 93         String filePath =FILEBASEPATH;
 94         File file = new File(filePath);
 95
 96         OutputStreamWriter osw = null;
 97         try
 98         {
 99             osw = new OutputStreamWriter(new FileOutputStream(file));
100             /*
101              * 2.设置xml文档的输出格式为缩进
102              */
103             OutputFormat format = OutputFormat.createPrettyPrint();
104             /*
105              *3.设置输出文档的编码为UTF-8
106              */
107             format.setEncoding("UTF-8");
108             XMLWriter out = new XMLWriter(osw, format);
109             /*
110              * 4.输出xml文档
111              */
112             out.write(document);
113
114         }
115         catch (FileNotFoundException e)
116         {
117             e.printStackTrace();
118         }
119         catch (IOException e)
120         {
121             e.printStackTrace();
122         }
123         finally
124         {
125             //关闭输出流
126             if(null != osw )
127             {
128                 try
129                 {
130                     osw.close();
131                 }
132                 catch (IOException e)
133                 {
134                     e.printStackTrace();
135                 }
136             }
137         }
138     }
139
140     /**
141      * 3.使用dom4j解析xml文件
142      */
143     public static void analyzeXml()
144     {
145         //生成的xml文件存放路径
146         String filePath =FILEBASEPATH;
147         File file = new File(filePath);
148         /*
149          * 1.使用SAXReader创建Document文档对象
150          */
151         SAXReader reader = new SAXReader();
152         try
153         {
154             Document document = reader.read(file);
155             /*
156              * 2.获取xml文件的根节点
157              */
158             Element root = document.getRootElement();
159             /*
160              * 3.获取子节点和属性
161              */
162             iteratorCherk(root);
163         }
164         catch (DocumentException e)
165         {
166             e.printStackTrace();
167         }
168
169     }
170
171     /**
172      * 4.获取节点名,节点属性
173      */
174     public static void iteratorCherk(Element element)
175     {
176         List<Element> elements = element.elements();
177         for(Element e : elements)
178         {
179             List<Attribute> attributeList = e.attributes();
180             String name = e.getName();
181             String text = e.getTextTrim();
182             if(text.length()==0)
183             {
184                 System.out.println(name+":");
185             }else
186             {
187                 System.out.println(name+"="+ text);
188             }
189             for(Attribute att : attributeList)
190             {
191                 String aname = att.getName();
192                 String atext = att.getText();
193                 System.out.println(aname +"="+ atext);
194             }
195             iteratorCherk(e);
196         }
197
198     }
199
200     /**
201      * 5.获取配置文件的配置信息
202      * @return
203      */
204     public static String getPropertiesInfo(String string)
205     {
206         InputStream inputStream = XmlUtils.class.getClassLoader().getResourceAsStream("config.properties");
207         Properties p = new Properties();
208         try
209         {
210             p.load(inputStream);
211         }
212         catch (IOException e)
213         {
214             e.printStackTrace();
215         }
216         return p.getProperty(string);
217     }
218 }

使用JUnit测试,代码清单【2】XmlTest.java

 1 package demo;
 2
 3 import org.junit.Test;
 4
 5 import com.lxf.xmlUtils.XmlUtils;
 6
 7 /**
 8  * xml工具类测试
 9  * @author Administrator
10  *
11  */
12 public class XmlTest
13 {
14     /**
15      * 创建xml文件测试
16      */
17     @Test
18     public void createXmlTest()
19     {
20         XmlUtils.getInstance().createXml();
21     }
22
23     /**
24      * 解析xml文件测试
25      */
26     @Test
27     public void analyzeXmlTest()
28     {
29         XmlUtils.getInstance().analyzeXml();
30     }
31
32 }

4.拓展和后期补充

  可以看到,我在项目中配置了一个.properties文件,大家可以在为xml文件增加节点和给节点赋值的时候,

读取配置文件的内容(.properties文件的内容结构是key=value).关于读取配置文件可以参照我的上一篇总结(java读取properties配置文件总结).

未来两天,我还会进行javaBean与Xml文件相互转换的总结,目前的想法是:

(1)使用目前掌握的dom4j知识;

(2)使用JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。

使用Marshaller接口,将Java对象序列化为XML数据;

    使用Unmarshaller接口,将XML数据反序列化为Java对象。

时间: 2024-10-25 15:07:32

使用dom4j创建和解析xml文件的相关文章

Java 创建过滤器 解析xml文件

今天写了一个过滤器demo,现在是解析actions.xml文件,得到action中的业务规则:不需要导入任何jar包 ActionFilter过滤器类: package accp.com.xh.utils; import java.io.IOException; import java.io.InputStream; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.Filte

PHP使用SimpleElement创建和解析xml文件

<!-- 使用SimpleXMLElement生成xml文件 --><?php//生成一个xml文件 //xml字符串$_xml = <<<_xml<?xml version="1.0" encoding="utf-8"?><root> <version>1.0</version><info>xml解析测试</info> <user><nam

PHP使用 DOMDocument创建和解析xml文件

<!-- DOMDocument生成XML文件 --><?php//声明一个DOMDocument对象$_doc=new DOMDocument('1.0', 'utf-8'); //使用XML标准化输出$_doc->formatOutput=true; //使用createelement创建标签$_root=$_doc->createElement('root');$_version=$_doc->createElement('version'); //创建versi

Java解析XML文件的方式

在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式,在这部分里,将分别给大家演示通过这两种方式解析xml文件的一般步骤. 1 XML的文件格式     XML是可扩展标记语言(Extensible Markup Language)的缩写,在其中,开始标签和结束标签必须配套地出现,我们来看下book.xml这个例子. 1 <?xml version=

使用DOM4J解析XMl文件与读取XML文件

XML文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <bookstore> 3 <book id="1"> 4 <name>冰与火之歌</name> 5 <author>乔治马丁</author> 6 <year>2014</year> 7 <price>89</price&g

【java项目实战】dom4j解析xml文件,连接Oracle数据库

简介 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方,我们还是看一下官方给出的解释.如下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT等语言的库.它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP等编程标准. 特点 dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用的特点,同时它也是一个开放源代码的软件.如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,例

在java项目中怎样利用Dom4j解析XML文件获取数据

在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进行直接读取,能够说这是程序中直接封装好的,包含配置文件里书写的格式等等.那么,假设.想要在配置文件里写一些其它的数据,直接以XML文件的格式进行书写.这个时候在后台怎样读取XML文件里的数据呢?这里利用Dom4j来解析XML文件里连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中

在java项目中如何利用Dom4j解析XML文件获取数据

在以前的学习.net时经常会遇到利用配置文件来解决项目中一些需要经常变换的数据,比如数据库的连接字符串儿等.这个时候在读取配置文件的时候,我们通常会用到一个雷configuration,通过这个类来进行直接读取,可以说这是程序中直接封装好的,包括配置文件中书写的格式等等.那么,如果,想要在配置文件中写一些其他的数据,直接以XML文件的格式进行书写,这个时候在后台如何读取XML文件中的数据呢?这里利用Dom4j来解析XML文件中连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中

java dom4j 解析XML文件 简易教程

XML 来自: W3School XML 被设计用来传输和存储数据. HTML 被设计用来显示数据. 什么是 XML? eXtensible Markup Language XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义.您需要自行定义标签. XML 被设计为具有自我描述性. XML 是 W3C 的推荐标准 XML 与 HTML 的主要差异 XML 不