`
agileai
  • 浏览: 62757 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

使用Dom4j进行XML解析

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");
contentElm.addCDATA(“cdata区域”);

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 it=root.attributeIterator();it.hasNext();){

Attribute attribute = (Attribute) it.next();

//操作处理

}

3.4 XML和字符串转换

  拼好XML格式数据后,需要调用接口,而接口的入参类型为String,这里需要将拼好的Document对象转换为字符串,方式为

String docText=document.asXML();

  而将XML格式的字符串转换为document对象的方式为

String text = "XML格式数据";

Document document = DocumentHelper.parseText(text);

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 XMLWriter(newFileWriter("contentChinese.xml"),format);

writer.write(document);

writer.close();

5  实例代码

  流程服务涉及到的部分相关代码

  创建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"));

  解析接口返回的XML格式数据,并判断ESB_CODE节点的内容

//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);

                     }

 

注:附件为操作样例工程代码,解析Project.xml文件并对其进行增删改查操作     文档及附件下载

 

 

分享到:
评论

相关推荐

    使用 dom4j 解析 XML

    使用 dom4j 解析 XML dom4j 解析 XML dom4j解析xml

    dom4j解析xml详解

    DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时的强大工具。DOM4J的最大亮点在于其简洁易用的API...

    使用dom4j和jaxen解析xml

    - **dom4j+jaxen操作XML**:首先使用dom4j解析XML,然后通过jaxen创建XPath对象并执行查询。查询结果可以是元素、属性或其他XML节点,根据需要进行进一步处理。 例如,以下代码展示了如何使用dom4j和jaxen解析XML...

    dom4j解析xml实例

    本文将深入探讨如何使用DOM4J进行XML解析,并通过实例来帮助理解。 首先,让我们了解DOM4J的基本概念。DOM4J是基于DOM(Document Object Model)模型的,但它比标准DOM更加轻量级,性能更好。DOM4J提供了丰富的接口...

    Dom4j解析XML文档.doc

    在本文中,我们将深入探讨如何使用DOM4J来解析和操作XML文档。 首先,要使用DOM4J,你需要下载其库文件。官方站点位于http://www.dom4j.org,你可以在这里找到最新的DOM4J包,例如dom4j-1.6.1.zip。解压缩后,你会...

    dom4j解析xml文件的压缩包

    这个压缩包包含了DOM4J的完整版本,适用于那些希望在Java项目中使用DOM4J进行XML操作的开发者。 首先,让我们深入了解一下DOM4J的核心概念和特性: 1. **Document对象**:DOM4J中的Document对象代表整个XML文档。...

    分别使用DOM和DOM4j解析XML文件

    本篇文章将详细介绍如何使用DOM(Document Object Model)和DOM4j这两种流行的方法来解析XML文件。 首先,DOM是一种标准的W3C推荐的解析XML的方法,它将整个XML文档加载到内存中,形成一个树形结构,便于程序进行...

    Dom4j遍历解析XML

    Dom4j 遍历解析 XML 是指使用 Dom4j 库来解析和遍历 XML 文档,提取其中的元素、属性和值。 在 Dom4j 中,遍历 XML 文档需要使用 SAXReader 对象来读取 XML 文件,并将其转换为 Document 对象。Document 对象是 Dom...

    利用Dom4j生成XML和解析XML

    在本文中,我们将学习如何使用 Dom4j 生成 XML 文档和解析 XML 文档。 生成 XML 文档 使用 Dom4j 生成 XML 文档非常简单。首先,我们需要创建一个 Document 对象,然后添加元素和属性。下面是一个生成 XML 文档的...

    使用dom4j解析XML

    【使用dom4j解析XML】 dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、创建、修改等。相比W3C DOM API,dom4j的优势在于其内置的XPath支持,允许更方便地定位和操作XML文档中的节点。 *...

    使用dom4j进行解析XML

    本文将详细介绍如何使用dom4j解析XML,并创建XML文档结构。 首先,我们需要引入dom4j库。如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>dom4j <artifactId>dom4j <version>...

    dom4j 解析(读取) xml 节点数据

    在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你已经下载了必要的依赖,即DOM4J库。通常,这将是一个名为`dom4j-x.x.x.jar`的文件,其中x.x.x是DOM4J的版本号...

    dom4j解析XML所需jar包

    Jaxen可以与多种XML解析器(如DOM、DOM4J、JDOM等)协同工作,提供跨平台的XPath支持。 总结来说,DOM4J是一个全面且易用的XML处理工具,广泛应用于Java开发中。通过`dom4j-1.6.1.jar`和`jaxen-1.1.1.jar`这两个jar...

    java dom4j解析xml

    Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...

    dom4j---xml解析jar包

    **DOM4J——XML解析库详解** XML(eXtensible Markup Language)作为一种标记语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行...

    dom4j解析xml

    ### DOM4J解析XML知识点详解 #### 一、DOM4J简介 DOM4J是一个Java库,用于处理XML文档。它的设计目标是为了提供一个简单、易于使用的API来处理XML文件,同时保持性能上的优势。与Java标准库中的DOM实现相比,DOM4J...

    dom4j 解析写入xml

    1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件

    DOM4J xml解析工具

    DOM4J作为XML解析工具,其核心功能包括: 1. **解析XML文档**:DOM4J可以使用SAX或DOM方式解析XML文件。SAX是事件驱动的解析器,适用于大文件,而DOM解析会将整个文档加载到内存,适合小文件。DOM4J的灵活性在于,...

    Java使用sax、dom、dom4j解析xml文档

    在选择XML解析方式时,需要考虑文件大小、内存限制以及操作需求。SAX适合处理大文件并进行只读操作;DOM适用于需要快速查找和修改数据的场景,但需消耗更多内存;DOM4J则提供了更高级的功能和更友好的API,适合复杂...

    DOM4J 解析XML

    **DOM4J解析XML** DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效且功能丰富的API,使得XML的读取、创建、修改和查询变得简单易行。DOM4J的主要特点包括对XPath的支持、事件驱动的解析、以及与...

Global site tag (gtag.js) - Google Analytics