使用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

 package com.lxf.xmlUtils;

 import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.util.List;
import java.util.Properties;
import java.util.UUID; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; /**
* 使用dom4j生成和解析xml文件
* @author Administrator
*2016/12/05
*/
public class XmlUtils
{
private static final XmlUtils INSTANCE = new XmlUtils(); private static final String UU_STRING = UUID.randomUUID().toString().substring(0, 5);
private static final String FILEBASEPATH = getPropertiesInfo("filepath") +"\\"+ UU_STRING + ".xml" ; public static XmlUtils getInstance()
{
return INSTANCE;
} /**
* 1.使用dom4j创建xml文档对象
*/
public static Document createDocument()
{
/*
* 1.使用DocumentHelper创建文档对象.
*/
Document document = DocumentHelper.createDocument();
/*
* 2.创建根节点
*/
Element root = DocumentHelper.createElement("message");
document.setRootElement(root);
/*
* 3.为根节点设置一级节点
*/
Element element1 = root.addElement("name");
element1.setText("java"); Element element2 = root.addElement("age");
element2.setText("23");
/*
* 为一级节点设置子节点
*/
Element element3 = root.addElement("address");
Element element31 = element3.addElement("id");
element31.setText("1");
Element element32 = element3.addElement("province");
element32.setText("北京市");
Element element33 = element3.addElement("street");
element33.setText("长安街");
/*
*4.为节点设置属性
*/
root.setAttributeValue("version", "2.0");
element1.setAttributeValue("kind", "book"); return document; } /**
* 2.使用dom4j创建输出xml文件
*/
public static void createXml()
{
/*
* 1.创建文档对象
*/
Document document = createDocument();
//生成的xml文件存放路径
String filePath =FILEBASEPATH;
File file = new File(filePath); OutputStreamWriter osw = null;
try
{
osw = new OutputStreamWriter(new FileOutputStream(file));
/*
* 2.设置xml文档的输出格式为缩进
*/
OutputFormat format = OutputFormat.createPrettyPrint();
/*
*3.设置输出文档的编码为UTF-8
*/
format.setEncoding("UTF-8");
XMLWriter out = new XMLWriter(osw, format);
/*
* 4.输出xml文档
*/
out.write(document); }
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
//关闭输出流
if(null != osw )
{
try
{
osw.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
} /**
* 3.使用dom4j解析xml文件
*/
public static void analyzeXml()
{
//生成的xml文件存放路径
String filePath =FILEBASEPATH;
File file = new File(filePath);
/*
* 1.使用SAXReader创建Document文档对象
*/
SAXReader reader = new SAXReader();
try
{
Document document = reader.read(file);
/*
* 2.获取xml文件的根节点
*/
Element root = document.getRootElement();
/*
* 3.获取子节点和属性
*/
iteratorCherk(root);
}
catch (DocumentException e)
{
e.printStackTrace();
} } /**
* 4.获取节点名,节点属性
*/
public static void iteratorCherk(Element element)
{
List<Element> elements = element.elements();
for(Element e : elements)
{
List<Attribute> attributeList = e.attributes();
String name = e.getName();
String text = e.getTextTrim();
if(text.length()==0)
{
System.out.println(name+":");
}else
{
System.out.println(name+"="+ text);
}
for(Attribute att : attributeList)
{
String aname = att.getName();
String atext = att.getText();
System.out.println(aname +"="+ atext);
}
iteratorCherk(e);
} } /**
* 5.获取配置文件的配置信息
* @return
*/
public static String getPropertiesInfo(String string)
{
InputStream inputStream = XmlUtils.class.getClassLoader().getResourceAsStream("config.properties");
Properties p = new Properties();
try
{
p.load(inputStream);
}
catch (IOException e)
{
e.printStackTrace();
}
return p.getProperty(string);
}
}

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

 package demo;

 import org.junit.Test;

 import com.lxf.xmlUtils.XmlUtils;

 /**
* xml工具类测试
* @author Administrator
*
*/
public class XmlTest
{
/**
* 创建xml文件测试
*/
@Test
public void createXmlTest()
{
XmlUtils.getInstance().createXml();
} /**
* 解析xml文件测试
*/
@Test
public void analyzeXmlTest()
{
XmlUtils.getInstance().analyzeXml();
} }

4.拓展和后期补充

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

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

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

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

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

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

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

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

  1. dom4j生成和解析xml文件

    dom4j生成和解析xml文件 要生成和解析如下格式的xml文件: <?xml version="1.0" encoding="UTF-8"?> & ...

  2. 使用dom4j创建和解析xml

    之前工作中用到了,相信写java的都会碰到xml,这里写了两个方法,创建和解析xml,废话不多说,直接上代码 package xml; import java.io.File; import java ...

  3. Java 创建过滤器 解析xml文件

    今天写了一个过滤器demo,现在是解析actions.xml文件,得到action中的业务规则:不需要导入任何jar包 ActionFilter过滤器类: package accp.com.xh.ut ...

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

    <!-- 使用SimpleXMLElement生成xml文件 --><?php//生成一个xml文件 //xml字符串$_xml = <<<_xml<?xml ...

  5. dom4j创建和解析xml文档

    DOM4J解析  特征: 1.JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能. 2.它使用接口和抽象基本类方法. 3.具有性能优异.灵活性好.功能强大和极端易用的特点. 4.是一个开 ...

  6. 使用libxml2创建和解析xml文件

    毕业设计需要用到xml文件来组织和存放数据, 对于Linux环境下,有libxml2可供使用. 经过一段时间查询文档和网站, 基本掌握创建xml文档和解析xml的操作, 简单做一下记录. 创建xml ...

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

    <!-- DOMDocument生成XML文件 --><?php//声明一个DOMDocument对象$_doc=new DOMDocument('1.0', 'utf-8'); / ...

  8. dom4j创建格式化的xml文件

    import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java. ...

  9. 使用Dom4j的xPath解析xml文件------xpath语法

    官方语法地址:http//www.w3school.com.cn/xpath/index.asp xpath使用路径表达式来选取xml文档中的节点或节点集.节点是通过沿着路径(path)或者步(ste ...

随机推荐

  1. ASP.NET之Cookie(坑爹的Response.Cookies.Remove)(转)

      在web开发中Cookie是必不可少的 .NET自然也有一个强大的Cookie操作类,我们用起来也非常方便,不过在使用中我们会发现一个坑爹的事情Response.Cookies.Remove删除不 ...

  2. [转载]Js小技巧||给input type=“password”的输入框赋默认值

    http://www.cnblogs.com/Raywang80s/archive/2012/12/06/2804459.html [转载]Js小技巧||给input type="passw ...

  3. 初学c# -- 学习笔记(三)

    结合前面学的许多东西,写了一个小程序.会话.自定义滚动条.css等等.小程序没有用数据库,主要不知道该用哪种,以后再说吧.登录也简单,就输入用户名就可以了. 百度是个好东西,写程序时候,需要什么图就直 ...

  4. JavaScript 学习小结

    简要的功能点: 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行. 操作 HTML 元素 d ...

  5. ajax请求封装

    var xmlHttp; var ajaxRequest = function (params) { xmlHttp ={}; this.url = params.url; this.method = ...

  6. Ubuntu:我不小心把/var/lock文件夹给删了

    在一个风和日丽的下午,不正常关闭minicom导致了device 没有正常解锁,于是使用minicom的时候提示 device is locked: 根据网上看到的方法只要把/var/lock 里面的 ...

  7. ZOJ 1442 Dinner Is Ready 容斥原理 + java大数

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=442 求解 x1 + x2 + x3 + .... + xn = m 其中xi属 ...

  8. linux 正则表达式与文件格式化处理

    此文涉及命令:grep.sed.awk.printf.diff.cmp.patch. 概念: 什么是正则表示法 简单的说,正则表示法就是处理字符串的方法,他是以行为单位来进行字符串的处理行为, 正则表 ...

  9. Codeforces Round #385 //再遇状压

    敲完三题挂机一小时.....  也没懂DE什么意思  rank600上了一波分... A. Hongcow Learns the Cyclic Shift 给一个字符串,每次可以把最后一个字符拿到开头 ...

  10. js 两数相减

    var SecondPrice = document.getElementById("txtSecondPrice");  //秒杀价            var MarketP ...