DOM4J操作XML(包括封装和解析)

先来看看dom4j中相应XML的DOM树建立的继承关系

针对于XML标准定义。相应于图2-1列出的内容,dom4j提供了下面实现:

以下给出一个详细事例:

package com.iboxpay.settlement.gateway.common.util;

import java.io.IOException;

import java.io.StringReader;

import java.io.StringWriter;

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;

import com.iboxpay.settlement.gateway.ccb.Constant;

import com.iboxpay.settlement.gateway.common.exception.PackMessageException;

import com.iboxpay.settlement.gateway.common.exception.ParseMessageException;

/**

* DOM4j工具类

* @author caolipeng

*/

public class DomUtil {

/**

* 加入孩子节点元素

* @param parent 父节点

* @param childName 孩子节点名称

* @param childValue 孩子节点值

* @return 新增节点

*/

public static Element addChild(Element parent, String childName,

String childValue) {

Element child = parent.addElement(childName);//加入节点元素

child.setText(childValue == null ?

"" : childValue); //为元素设值

return child;

}

/**

* DOM4j的Document对象转为XML报文串

* @param document

* @param charset

* @return 经过解析后的xml字符串

*/

public static String documentToString(Document document,String charset) {

StringWriter stringWriter = new StringWriter();

OutputFormat format = OutputFormat.createPrettyPrint();//获得格式化输出流

format.setEncoding(charset);//设置字符集,默觉得UTF-8

XMLWriter xmlWriter = new XMLWriter(stringWriter, format);//写文件流

try {

xmlWriter.write(document);

xmlWriter.flush();

xmlWriter.close();

} catch (IOException e) {

throw new RuntimeException(e);

}

return stringWriter.toString();

}

/**

* 去掉声明头的(即<?xml...?>去掉)

* @param document

* @param charset

* @return

*/

public static String documentToStringNoDeclaredHeader(Document document,String charset) {

String xml = documentToString(document, charset);

return xml.replaceFirst("\\s*<[^<>]+>\\s*", "");

}

/**

* 解析XML为Document对象

* @param xml 被解析的XMl

* @return Document

* @throws ParseMessageException

*/

public final static Element parseXml(String xml)throws ParseMessageException{

StringReader sr = new StringReader(xml);

SAXReader saxReader = new SAXReader();

Document document;

try {

document = saxReader.read(sr);

} catch (DocumentException e) {

throw new ParseMessageException(e);

}

Element rootElement = document.getRootElement();

return rootElement;

}

public final static String getText(Element e, String tag){

Element _e = e.element(tag);

if(_e != null)

return _e.getText();

else

return null;

}

public final static String getTextTrim(Element e, String tag){

Element _e = e.element(tag);

if(_e != null)

return _e.getTextTrim();

else

return null;

}

/**

* 获取节点值.节点必须不能为空,否则抛错

* @param parent

* @param tag

* @return

* @throws ParseMessageException

*/

public final static String getTextTrimNotNull(Element parent, String tag) throws ParseMessageException{

Element e = parent.element(tag);

if(e == null)

throw new ParseMessageException(parent.getName() + " -> " + tag + " 节点为空.");

else

return e.getTextTrim();

}

/**

* 节点必须不能为空,否则抛错

* @param parent

* @param tag

* @return

* @throws ParseMessageException

*/

public final static Element elementNotNull(Element parent, String tag) throws ParseMessageException{

Element e = parent.element(tag);

if(e == null)

throw new ParseMessageException(parent.getName() + " -> " + tag + " 节点为空.");

else

return e;

}

public static void main(String[] args) throws PackMessageException, ParseMessageException {

Document document = DocumentHelper.createDocument();

document.setXMLEncoding("GB2312");

Element root = document.addElement("TX");

DomUtil.addChild(root, "REQUEST_SN", "bankBatchSeqId");

DomUtil.addChild(root, "CUST_ID", "cust_id");

DomUtil.addChild(root, "USER_ID", "user_id");

DomUtil.addChild(root, "PASSWORD", "password");

DomUtil.addChild(root, "TX_CODE", "txCode");

DomUtil.addChild(root, "LANGUAGE", "CN");

Element tx_info = root.addElement(Constant.TX_INFO);

DomUtil.addChild(tx_info, Constant.REQUEST_SN1, "request_sn1");

String xml = DomUtil.documentToStringNoDeclaredHeader(root.getDocument(), "GBK");

System.out.println(xml);

root = parseXml(xml);

System.out.println(root.element("TX_INFO").elementText("REQUEST_SN1"));

}

}

主函数測试结果为:

<TX>

<REQUEST_SN>bankBatchSeqId</REQUEST_SN>

<CUST_ID>cust_id</CUST_ID>

<USER_ID>user_id</USER_ID>

<PASSWORD>password</PASSWORD>

<TX_CODE>txCode</TX_CODE>

<LANGUAGE>CN</LANGUAGE>

<TX_INFO>

<REQUEST_SN1>request_sn1</REQUEST_SN1>

</TX_INFO>

</TX>

request_sn1

博客參考文献:http://www.cnblogs.com/macula/archive/2011/07/27/2118003.html

时间: 05-13

DOM4J操作XML(包括封装和解析)的相关文章

使用Dom4j操作XML数据

--------------siwuxie095 dom4j 是一个非常优秀的 Java XML 的 API, 用来读写 XML 文件 和操作 XML 数据 特点:性能优异.功能强大.极端易用 dom4j 的下载链接:http://www.dom4j.org/dom4j-1.6.1/ 将 dom4j-1.6.1.zip 解压一览: 工程名:TestDom4j 包名:com.siwuxie095.dom4j 类名:Test.java 打开资源管理器,在工程 TestDom4j 文件夹下,创建一个

dom4j操作xml对象

// 获取Documen对象 public static Document getDocument(String path) throws Exception{ // 解析器对象 SAXReader reader = new SAXReader(); // 解析 return reader.read(path); } // 回写(XMLWriter) public static void writeXml(Document document,String path) throws Excepti

Strus2第一次课:dom4j操作xml

先从底层的xml操作技术记录: 当我们新建一个项目,什么架包都没加入的时候,java提供了 org.w3c.dom给我们操作xml里面的元素 import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; 并且提供了 javax.xml来读取xml.对xml进行增删改操作 如何读取一个xml文件: 导包: javax.xml.parsers

转 四种操作xml的方式(SAX, DOM, JDOM, DOM4J)比较

四种操作xml的方式(SAX, DOM, JDOM, DOM4J)比较 (2010-10-29 15:31:28) 转载▼  http://blog.sina.com.cn/s/blog_6458bf440100mgjs.html 标签: 杂谈 分类: JAVA技术 1 介绍 引子:XML自从出现以来,以其可扩展性.自描述性.自相容性等优点,被誉为信息标准化过程的有力工具,基于XML的标准将成为以后信息标准的主流.伴随而生的是针对XML的操作技术,“名人总的有人去解析”吗!下面是愚人对目前主要的

使用 Dom4j 对XML操作!!!

转自:http://blog.csdn.net/redarmy_chen/article/details/12969219 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它. 对主流的Java XML API进行的性能.功能和易用性的评测,dom4j无论在那个方面都是非常出色的.如今你可以看到越来越

XML编程总结(四)——使用dom4j方式操作xml

(四)使用dom4j方式操作xml dom4j是解析XML的一种开源API,是jdom的升级品,用来读写XML文档.它具有性能优异.功能强大和极易使用的特点,它的性能超过sun公司官方的dom技术.dom4j对Xpath有良好的支持(使用xpath时需要导入jaxen的jar包),dom4j最大的特色使用大量的接口.使用dom4j时需要导入dom4j-xxx.jar包. Attribute ——Attribute定义了XML的属性 Branch ——Branch为能够包含子节点的节点如XML元素

JAVA用dom4j对xml的解析

一.DOM4j中,获得Document对象的方式有三种: [java] view plain copy 1.读取XML文件,获得document对象 SAXReader reader = new SAXReader(); Document   document = reader.read(new File("csdn.xml")); 2.解析XML形式的文本,得到document对象. String text = "<csdn></csdn>"

Java操作XML文件 dom4j 篇

在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; //工具包 import java.util.Iterator; import java.util.List; //dom4j包 import org.dom

7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml

 数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDefault.xml.所有的key皆为char *型,value类型为bool intfloat double std::string. 读操作 bool getBoolForKey(const char* pKey); bool getBoolForKey(const char* pKey, bool

dom4j xml的生成与解析

这两天在一直写数据接口,涉及到数据xml文件的生成与解析,在此,简单地记录和总结一下. 其实,生成与解析xml文件主要还是运用java中的I/O文件的知识点. 现在大多数的人写xml文件的生成和解析都使用dom4j,它确实比传统的w3c的写法要简单方便的多.就像jQuery相比于js的优点显而易见一般. dom4j 简介: dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常优秀的Java XML API,同时它也是一个开放源代码的软件,可以在So