使用Dom4j进行XML解析
2016-10-24 15:13
543 查看
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(); |
1.读取XML文件,获得document对象
SAXReader reader = new SAXReader(); Document document = reader.read(new File("csdn.xml")); |
String text = "XXXX"; Document document = DocumentHelper.parseText(text); |
创建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(); //操作处理 } |
for(Iterator it=root.elementIterator();it.hasNext();){ Element element = (Element) it.next(); //操作处理 } |
element.setText("XXXX"); |
childElement是待删除的节点 parentElement是其父节点 parentElement.remove(childElment); |
在拼接完整的soap请求体时,涉及到soap请求体中添加XML格式数据时,不需要soap协议进行解析的内容,需要添加CDATA节点
Element contentElm = infoElm.addElement("content"); contentElm.addCDATA(“cdata区域”); |
添加了节点后,需要在节点中进行说明此节点的含义,这时需要给这个节点添加属性
element.addAttribute("属性名 ", "内容"); |
1.取得某节点下的某属性
Element root=document.getRootElement(); Attribute attribute=root.attribute("属性名"); |
String text=attribute.getText(); |
Attribute attribute=root.attribute("属性名"); root.remove(attribute); |
Attribute attribute=root.attribute("属性名"); attribute.setText("内容"); |
Element root=document.getRootElement(); for(Iterator it=root.attributeIterator();it.hasNext();){ Attribute attribute = (Attribute) it.next(); //操作处理 } |
拼好XML格式数据后,需要调用接口,而接口的入参类型为String,这里需要将拼好的Document对象转换为字符串,方式为
String docText=document.asXML(); |
String text = "XML格式数据"; Document document = DocumentHelper.parseText(text); |
4.1 文档操作
1.全为英文
XMLWriter writer = new XMLWriter(new FileWriter("allEnglish.xml")); writer.write(document); writer.close(); |
OutputFormat format = OutputFormat.createPrettyPrint(); // 创建文件输出的时候,自动缩进的格式 format.setEncoding("UTF-8"); //设置编码 XMLWriter writer = new XMLWriter(newFileWriter("contentChinese.xml"),format); writer.write(document); writer.close(); |
流程服务涉及到的部分相关代码
创建document对象并拼接XML
DataRow headerDataRow = (DataRow) this.getVariable("headerDataRow").getValue(); // XmlUtil是一个XML操作工具类,在数通畅联产品内置的jar包中 Document document = XmlUtil.createDocument(); Element dataElement = document.addElement("DATA"); dataElement.addElement("REQUESTDATA"); Element datainfosElement = dataElement.addElement("DATAINFOS"); datainfosElement.addAttribute("REMARK", "主表"); Element danhaoElement = datainfosElement.addElement("DANHAO"); danhaoElement.addAttribute("REMARK", "单号"); danhaoElement.addText(headerDataRow.getString("APPLY_NUMBER")); Element xingmingElement = datainfosElement.addElement("XINGMING"); xingmingElement.addAttribute("REMARK", "姓名"); xingmingElement.addText(headerDataRow.getString("APPLY_USER_NAME")); |
//getVariable是ESB中封装好的方法,用于通过CODE值获取流程变量 String soapResponse = (String) this.getVariable("soapResponse").getValue(); Document document = DocumentHelper.parseText(soapResponse); Element root = document.getRootElement(); Element resultCode = root.element("ESB_CODE"); int resultMark = 0; if("S".equals(resultCode.getText())){ resultMark = 1; int applyId = (Integer) this.getVariable("applyId").getValue(); DataRow updateRow = new DataRow("APPLY_ID",applyId,"OA_FLAG","N"); this.getVariable("updateRow").setValue(updateRow); } |
相关文章推荐
- XML_使用dom4j对xml文件进行解析_.flv
- 简单使用DOM4J解析XML(如何使用dom4j对xml进行读取)
- 使用面向对象对XML进行解析:dom和dom4j的用法
- dom4j 解析元素无属性和有属性的xml文件,都使用反射进行注值
- 使用HttpClient进行http post/get方法的调用,以及使用dom4j解析xml
- xml解析之使用dom4j的api对xml文件进行CRUD(二)
- 使用HttpClient进行http post/get方法的调用,以及使用dom4j解析xml
- xml简单介绍及使用dom4j进行解析
- javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)
- 【XML解析】(4)Java下使用DOM4J解析方式对XML文档进行解析
- 使用Dom4j进行XML解析
- xml解析4:使用dom4j框架进行对xml文档生成和读写解析
- xml解析之使用dom4j的api对xml文件进行CRUD(二)
- 【XML解析】使用Dom4j对XML进行SAX解析
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML(转自IBM)
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用dom4j的xPath解析XML