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

时间: 2024-10-13 20:26:24

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

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

Dom4j操作xml

boolean flag = budgetCommon.createFolderFile("C:\\mfmis\\DefaulSetting\\DefaulBudgetorginConfig.xml");//"+format.format(new Date())+" if(flag){//若返回为true,则代表此目录下的文件不存在,为第一次创建 budgetCommon.saveDefaulXML(defaulSettingForm,defaulSettingDi

使用dom4j操作xml文件的增删改

package day2.domx; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter;

Java xml 操作(Dom4J修改xml &#160;&#160;+ xPath技术 &#160;+ SAX解析 + XML约束)

1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大小写.有且仅有一个根标签. 属性: 可有多个属性,但属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单 双混用. 文档声明: <?xml version="1.0" encoding="utf-8"?> encoding="utf-8&q

XML学习笔记(2)--dom4j操作XML

1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析器)         DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象

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

dom4j操作xml的demo

package com.cn.shop.util; 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.DocumentException;i