使用Dom4j解析xml文件

文章介绍了Dom4j作为JavaXML解析器的特性,包括高性能、易用性和可扩展性,并展示了如何利用Dom4j解析来自第三方Webservice接口的复杂XML数据,将其转换为JSON格式。示例代码演示了从XML到JSON的具体转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Dom4j是一个Java的XML解析器,它提供了一种基于Java的XML解析方式,可以方便地读取、操作和生成XML文档。Dom4j的主要特点包括:
高性能:Dom4j使用了一种基于事件的解析方式,可以快速地解析大型XML文档。
易用性:Dom4j提供了简单易用的API,可以方便地读取、操作和生成XML文档。
可扩展性:Dom4j支持插件机制,可以方便地扩展其功能。
兼容性:Dom4j支持标准的XML解析方式,可以与其他XML解析器兼容。

场景

现在我调用其他第三方WebService接口返回的数据是一个很复杂的xml,格式如下:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <AAFlow002yResponse xmlns="http://tempuri.org/">
            <AAFlow002yResult>
                <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
                    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="AAFlow002" msdata:UseCurrentLocale="true">
                        <xs:complexType>
                            <xs:choice minOccurs="0" maxOccurs="unbounded">
                                <xs:element name="AAFlow002">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element name="F1000" type="xs:string" minOccurs="0" />
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                            </xs:choice>
                        </xs:complexType>
                    </xs:element>
                </xs:schema>
                <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
                    <DocumentElement xmlns="">
                        <AAFlow002 diffgr:id="AAFlow0021" msdata:rowOrder="0">
                                                   <F1000>2596</F1000>
                        </AAFlow002>
                    </DocumentElement>
                </diffgr:diffgram>
            </AAFlow002yResult>
        </AAFlow002yResponse>
    </soap:Body>
</soap:Envelope>

现在我需要将上面返回的复杂的xml转换为Json格式

代码具体实现

从第三方系统返回来的xml是一个字符串格式的数据,解析如下:

 /**
     * 解析webservice的返回结果,将xml解析为json格式数据
     * @param xmlStr xml内容
     * @return
     */
    public static JSONObject xml2Json(String xmlStr) throws DocumentException {
        // 根据返回的xml数据,使用dom4j进行解析
        Document doc = DocumentHelper.parseText(xmlStr);
        Element root = doc.getRootElement();
        Element body = root.element("Body");
        Element response = body.element("AAFlow002Response");
        Element result = response.element("AAFlow002Result");
        Element diffgram = result.element(new QName("diffgram", Namespace.get("urn:schemas-microsoft-com:xml-diffgram-v1")));
        Element documentElement = diffgram.element("DocumentElement");
        Element aaFlow002 = documentElement.element("AAFlow002");
        JSONObject jsonObject = new JSONObject();
        Iterator<Element> iterator = aaFlow002.elementIterator();
        while (iterator.hasNext()) {
            Element element = iterator.next();
            jsonObject.put(element.getName(), element.getText());
        }
        return jsonObject;
    }
    ···
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代号diitich

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值