使用Dom4j进行XML解析
1 概述
在进行ESB集成项目中,使用到了很多系统的接口,这些接口传输的数据大部分都采用了XML的格式,这样在使用ESB开发服务时就需要对XML数据进行解析或拼接的操作,本文以项目中流程服务为例,讲解一些常用的Dom4j对XML的操作。
2 名词解释
Dom4j:一个Java的XML API,用来读写XML文件的,具有性能优异、功能强大和极端易用使用的特点。
使用Dom4j需要使用对应的jar包,官网下载地址:
http://www.dom4j.org/dom4j-1.6.1/
Dom4jAPI地址:
http://www.oschina.net/uploads/doc/dom4j-1.6.1/index.html
AEAI ESB:应用集成平台主要作为企业信息系统的“龙骨”来集成各业务系统,一般称之为企业服务总线(Enterprise Service BUS,ESB),在数通畅联软件的产品家族中应用集成平台命名为AEAI ESB
3 操作方法
在ESB流程中需要先查询出第三方系统需要的数据,再进行XML格式化处理后,调用第三方系统提供的Web Service服务,这里需要创建一个XML格式的数据。
3.1 创建Document对象
这里采用以下方法主动创建document对象
|
Document document = DocumentHelper.createDocument(); |
查询相关API发现还有另外两种创建对象的方法
1.读取XML文件,获得document对象
|
SAXReader reader = new SAXReader(); Document document = reader.read(new File("csdn.xml")); |
2.解析XML形式的文本,得到document对象
|
String text = "XXXX"; Document document = DocumentHelper.parseText(text); |
3.2 节点操作
创建document后,添加第一个节点
|
Element dataElement = document.addElement("DATA"); |
这个节点作为根节点
这里通过API来说明一下其他节点操作的方法
1.获取根节点
Element root = document.getRootElement();
2.取得某个节点的子节点.
Element element= root.element(“REQUESTDATA”);
3.取得节点的内容
String text= element.getText();
4.取得某节点下所有名为” REQUESTDATA”的子节点,并进行遍历
|
List elements = rootElm.elements("csdn"); for (Iterator it = elements.iterator(); it.hasNext();) { Element elm = (Element) it.next(); //操作处理 } |
5.对某节点下的所有子节点进行遍历
|
for(Iterator it=root.elementIterator();it.hasNext();){ Element element = (Element) it.next(); //操作处理 } |
6.设置节点文字
|
element.setText("XXXX"); |
7.删除某节点
|
childElement是待删除的节点 parentElement是其父节点 parentElement.remove(childElment); |
8.添加一个CDATA节点
在拼接完整的soap请求体时,涉及到soap请求体中添加XML格式数据时,不需要soap协议进行解析的内容,需要添加CDATA节点
|
Element contentElm = infoElm.addElement("content"); |
3.3 属性操作
添加了节点后,需要在节点中进行说明此节点的含义,这时需要给这个节点添加属性
|
element.addAttribute("属性名 ", "内容"); |
通过相关API找到其他的属性操作方法
1.取得某节点下的某属性
|
Element root=document.getRootElement(); Attribute attribute=root.attribute("属性名"); |
2.取得属性的内容
|
String text=attribute.getText(); |
3.删除某属性
|
Attribute attribute=root.attribute("属性名"); root.remove(attribute); |
4.设置属性的内容
|
Attribute attribute=root.attribute("属性名"); attribute.setText("内容"); |
5.遍历某节点的所有属性
|
Element root=document.getRootElement(); for(Iterator Attribute attribute = (Attribute) //操作处理 } |
3.4 XML和字符串转换
拼好XML格式数据后,需要调用接口,而接口的入参类型为String,这里需要将拼好的Document对象转换为字符串,方式为
|
String docText=document.asXML(); |
而将XML格式的字符串转换为document对象的方式为
|
String text = "XML格式数据"; Document document = |
4 其他说明
4.1 文档操作
1.全为英文
|
XMLWriter writer = new XMLWriter(new FileWriter("allEnglish.xml")); writer.write(document); writer.close(); |
2.含有中文
|
OutputFormat format = OutputFormat.createPrettyPrint(); // 创建文件输出的时候,自动缩进的格式 format.setEncoding("UTF-8"); //设置编码 XMLWriter writer = new writer.write(document); writer.close(); |
5 实例代码
流程服务涉及到的部分相关代码
创建document对象并拼接XML
|
DataRow // Document document = Element dataElement = dataElement.addElement("REQUESTDATA"); Element datainfosElement datainfosElement.addAttribute("REMARK", Element danhaoElement = danhaoElement.addAttribute("REMARK", danhaoElement.addText(headerDataRow.getString("APPLY_NUMBER")); Element xingmingElement = xingmingElement.addAttribute("REMARK", xingmingElement.addText(headerDataRow.getString("APPLY_USER_NAME")); |
解析接口返回的XML格式数据,并判断ESB_CODE节点的内容
|
//getVariable是ESB中封装好的方法,用于通过CODE值获取流程变量 String Document document = Element root = Element resultCode = int resultMark = 0; if("S".equals(resultCode.getText())){ resultMark = 1; int applyId = DataRow updateRow this.getVariable("updateRow").setValue(updateRow); } |
注:附件为操作样例工程代码,解析Project.xml文件并对其进行增删改查操作 文档及附件下载
使用Dom4j进行XML解析的更多相关文章
- DOM4J -(XML解析包)
DOM4J - 简介 是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,采用了Java集合框架并完全支持DOM, ...
- 使用DOM4J 对xml解析操作
参考自:https://blog.csdn.net/redarmy_chen/article/details/12969219 dom4j是一个Java的XML API,类似于jdom,用来读写XML ...
- Dom4j 对XMl解析 新手学习,欢迎高手指正
废话不多,先看代码 public static void main(String args[]){ ReaderXml("d:/example.xml");//读取XML,传入XM ...
- Java之dom4j的简单解析和生成xml的应用
一.dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能超过sun公 ...
- JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)
1.CDATA区在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直 ...
- Java使用DOM4J对XML文件进行增删改查操作
Java进行XML文件操作,代码如下: package com.founder.mrp.util; import java.io.File; import java.util.ArrayList; i ...
- 使用dom4j创建和解析xml文件
使用dom4j创建和解析xml文件 在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j. 下面我就以代码来讲解一下如何使用dom4j来创建x ...
- Java XML解析工具 dom4j介绍及使用实例
Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...
- 【Java】XML解析之DOM4J
DOM4J介绍 dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP,使用需要引用dom4j.jar包 ...
随机推荐
- 《OOC》笔记(3)——C语言变长参数va_list的用法
<OOC>笔记(3)——C语言变长参数va_list的用法 C语言中赫赫有名的printf函数,能够接受的参数数目不固定,这就是变长参数.C#里也有params这个关键字用来实现变长参数. ...
- IOS UIView 04- 自定义控件
注:本人是翻译过来,并且加上本人的一点见解. 前言 本文将讨论一些自定义视图.控件的诀窍和技巧.我们先概述一下 UIKit 向我们提供的控件,并介绍一些渲染技巧.随后我们会深入到视图和其所有者之间的通 ...
- 使用Vue.js时,对Chrome控制台的一点小心得
之前对Chrome控制台的console.log()输出没太放心上,其实仔细研究后,对工作效率有显著的提示.看下面的五段代码: console.log(''); console.log(typeof ...
- Java-集合练习题1
第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年 ...
- 知方可补不足~SQL2008中的发布与订阅模式~续
回到目录 上一回介绍了如何在sql2008中建立一个数据库的发布者,今天来说一下如何建立一个订阅者,其实订阅者也是一个数据库,而这个数据库是和发布者的数据结构相同的库,它们之间通过SQL代理进行数据上 ...
- 爱上MVC~为CheckBoxFor和RadioButtonFor加个扩展方法吧(希望MVC5把这方法收纳——呵呵)
回到目录 说在前 我都是喜欢把问题复杂化,还有总是喜欢把问题简单化,偷懒化,这也需就是一个程序员的追求吧,呵呵. 我不太喜欢重复的东西,当你看到页面上有一个以上相同的代码时,那可以说,你的代码有重构的 ...
- java 线程协作 wait(等待)与 notiy(通知)
一.wait().notify()和notifyAll() 为了更好的支持多线程之间的协作,JDK提供了三个重要的本地方法 //调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对 ...
- EasyUI Datagrid Datetime(EasyUI DataGrid 时间格式化)
EasyUI DataGrid 时间格式化 方法一: var Common = { //EasyUI用DataGrid用日期格式化 TimeFormatter: function (value, re ...
- html5视频全频播放
html5视频全频播放 旋转90度 对video进行缩放 修正position 效果还凑合 代码 $(media).rotate({ // angle: 90, duration: 100, anim ...
- Distribution of Data Through OCAF Tree
Distribution of Data Through OCAF Tree OCAF数据的分配 eryar@163.com 一.作者注 Annotation 本文档主要用于说明OCAF(Open C ...