dom4j解析Xml,dom4j解析带命名空间的Xml内容,dom4j解析xml为实体类

首先引入maven:

        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.1.6</version>
        </dependency>            

要解析的 xml 内容:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmladnsoaper.org/soaper/envel/">
    <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
        <TrackReply xmlns="http://fedde.com/ws/track/v14">
            <HighestSeverity>SUCCESS</HighestSeverity>
            <CompletedTrackDetails>
                <HighestSeverity>SUCCESS</HighestSeverity>
                <Notifications>
                    <Severity>SUCCESS</Severity>
                    <Source>trck</Source>
                    <Code>0</Code>
                    <Message>Request was successfully processed.</Message>
                    <LocalizedMessage>Request was successfully processed.</LocalizedMessage>
                </Notifications>
                <DuplicateWaybill>false</DuplicateWaybill>
                <MoreData>false</MoreData>
                <TrackDetailsCount>0</TrackDetailsCount>
                <TrackDetails>
                    <Notification>
                        <Severity>SUCCESS</Severity>
                        <Source>trck</Source>
                        <Code>0</Code>
                        <Message>Request was successfully processed.</Message>
                        <LocalizedMessage>Request was successfully processed.</LocalizedMessage>
                    </Notification>
                    <Events>
                        <Timestamp>2017-08-09T09:29:00+02:00</Timestamp>
                        <EventType>DL</EventType>
                        <EventDescription>Delivered to a non-FedEx clearance broker</EventDescription>
                        <Address>
                            <City>CAMPEGINE</City>
                            <StateOrProvinceCode>RE</StateOrProvinceCode>
                            <PostalCode>42040</PostalCode>
                            <CountryCode>IT</CountryCode>
                            <CountryName>Italy</CountryName>
                            <Residential>false</Residential>
                        </Address>
                        <ArrivalLocation>DELIVERY_LOCATION</ArrivalLocation>
                    </Events>
                    <Events>
                        <Timestamp>2017-08-09T08:58:00+02:00</Timestamp>
                        <EventType>OD</EventType>
                        <EventDescription>On FedEx vehicle for delivery</EventDescription>
                        <Address>
                            <City>CAMPEGINE</City>
                            <PostalCode>42040</PostalCode>
                            <CountryCode>IT</CountryCode>
                            <CountryName>Italy</CountryName>
                            <Residential>false</Residential>
                        </Address>
                        <ArrivalLocation>VEHICLE</ArrivalLocation>
                    </Events>
                    <Events>
                        <Timestamp>2017-08-09T08:39:00+02:00</Timestamp>
                        <EventType>AR</EventType>
                        <EventDescription>At local FedEx facility</EventDescription>
                        <Address>
                            <City>CAMPEGINE</City>
                            <PostalCode>42040</PostalCode>
                            <CountryCode>IT</CountryCode>
                            <CountryName>Italy</CountryName>
                            <Residential>false</Residential>
                        </Address>
                        <ArrivalLocation>DESTINATION_FEDEX_FACILITY</ArrivalLocation>
                    </Events>
                </TrackDetails>
            </CompletedTrackDetails>
        </TrackReply>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

java 代码解析带命名空间内的Events标签内容:

private List<Event> getFeddeDetails(String body) {
        List<Event> eventList = new ArrayList<Event>();
        Document document;
        try {
            Map<String, String> nameSpaceMap = new HashMap<>();
            nameSpaceMap.put("track", "http://Fedde.com/waws11/track12/v14");
            document = DocumentHelper.parseText(body);
            Element element = document.getRootElement();
            XPath xPath = element.createXPath("//track:Events");
            xPath.setNamespaceURIs(nameSpaceMap);
            List<Element> EventsList = xPath.selectNodes(element);
            Iterator<Element> EventsIter = EventsList.iterator();
            while (EventsIter.hasNext()) {
                Element eventElt = EventsIter.next();
                Event event = new Event();
                Iterator<Element> subIter = eventElt.elements().iterator();
                while (subIter.hasNext()) {
                    Element subElt = subIter.next();
                    if ("Timestamp".equals(subElt.getName())) {
                        event = dateFormat(subElt.getStringValue(), event);
                    } else if ("EventDescription".equals(subElt.getName())) {
                        event.setDescription(subElt.getStringValue());
                    } else if ("Address".equals(subElt.getName())) {
                        Element cityElt = subElt.element("City");
                        event.setCity(cityElt.getStringValue());
                        Element CountryElt = subElt.element("CountryName");
                        event.setCountry(CountryElt.getStringValue());
                    }
                }
                eventList.add(event);
            }
            for (Event event : eventList) {
                System.out.println(event);
            }

        } catch (DocumentException | ParseException e) {
            e.printStackTrace();
        }
        return eventList;
    }

输出结果:

Event [city=KWUN TONG, country=Hong Kong, date=2017-08-07, time=12:10, description=Left FedEx origin facility]
Event [city=KWUN TONG, country=Hong Kong, date=2017-08-07, time=09:01, description=Picked up]
时间: 2024-11-07 11:16:34

dom4j解析Xml,dom4j解析带命名空间的Xml内容,dom4j解析xml为实体类的相关文章

dom4j解析带命名空间的xml文件

文件内容如下 <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/"> <string>浙江</string> <string>杭州</string> <

带命名空间的XML的dom4j应用&lt;转&gt;

Element root = document.getRootElement();     List   recordenvlist = document.selectNodes("//gml:envelope");     //gml:envelope 提示 NoClassDefFoundError org.dom4j.DocumentFactory.createXPath 原因:dom4j的xpath api依赖jaxen完成解决方法:在系统中加入jaxen.jar.jaxen.j

C# 解析带命名空间的xml

xml <?xml version="1.0" encoding="utf-8"?> <string xmlns="http://tempuri.org/">发票代码:012001800311 发票号码:24961816 开票日期:2019-04-02 购方企业名称:购方纳税号:913101140781x22VV1 销方企业名称:清出公司 销方纳税号:911201163409833307 价税合计:4 金额:94.76 税

linq 解析 带命名空间的xml

前言:xml的操作方式有多种,但要论使用频繁程度,博主用得最多的还是Linq to xml的方式,觉得它使用起来很方便,就用那么几个方法就能完成简单xml的读写.之前做的一个项目有一个很变态的需求:C#项目调用不知道是什么语言写的一个WebService,然后添加服务引用总是失败,通过代理的方式动态调用也总是报错,最后没办法,通过发送原始的WebRequest请求直接得到对方返回的一个xml文件.注意过webservice的wsdl文件的朋友应该知道这个是系统生成的xml文件,有点复杂,研究了半

iOS XML 系统自带的解析方法

XML 文档解析 使用的五个代理方法1.文档解析开始 parserDidStartDocument:2.文档解析结束 parserDidEndDocument:3.文档 解析元素 开始 didStartElement:4.文档 解析元素 结束 didEndElement:5.解析 文档元素 的内容 parser foundCharacters: #import <UIKit/UIKit.h> @interface ViewController : UIViewController<NSX

Linq to Xml读取复杂xml(带命名空间)

前言:xml的操作方式有多种,但要论使用频繁程度,博主用得最多的还是Linq to xml的方式,觉得它使用起来很方便,就用那么几个方法就能完成简单xml的读写.之前做的一个项目有一个很变态的需求:C#项目调用不知道是什么语言写的一个WebService,然后添加服务引用总是失败,通过代理的方式动态调用也总是报错,最后没办法,通过发送原始的WebRequest请求直接得到对方返回的一个xml文件.注意过webservice的wsdl文件的朋友应该知道这个是系统生成的xml文件,有点复杂,研究了半

利用oxygen编辑并生成xml文件,并使用JAVA的JAXB技术完成xml的解析

首先下载oxygen软件(Oxygen XML Editor),目前使用的是试用版(可以安装好软件以后get trial licence,获得免费使用30天的权限,当然这里鼓励大家用正版软件!!!) 1 首先建立一个空白XML文件,直接点击下图所示即可: 2 可以使用xml文本编辑界面,或者使用xml树状图编辑界面 切换到xml树状图编辑界面的方法为: 即可调出当前xml文件所对应的xml树状图编辑界面 3 设计并编辑xml文件 根据自己的需要可以利用xml树状图操作界面来方便的设计自己的xml

PHP 面向对象编程和设计模式 (5) - PHP 命名空间的使用及名称解析规则

PHP高级程序设计 学习笔记 2014.06.12 命名空间概述 PHP 在 5.3.0 以后的版本开始支持命名空间.什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念.在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题: 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性. PH

PHP通过XML报文方式,已第三方接口交互(发送xml,获取XML,并解析xml步骤)

开发者端:发送请求,并接收结果 <?php // 下面的demo,实现的功能如下: // 1-开发者需要判断一个用户是否存在,去请求第三方接口. // 2-与第三方接口的通信,是以xml格式传送数据.开发者把用户信息以xml格式发送给第三方接口 // 3-第三方接口获取开发者的xml数据,通过数据的查询,把结果再以xml的格式发送给开发者. //首先检测是否支持curl if (!extension_loaded("curl")) { trigger_error("对不