org.dom4j.DocumentHelper 解析 XML 格式的数据

DocumentHelper 解析 XML 报文

Java中当我们调用WebService接口时,响应回来的是XML格式的数据时,我们应该如何解析并获取其中的数据呢?此时我们就可以借助 org.dom4j.DocumentHelper 类来进行处理,废话少说,代码如下【包含单节点、数组节点】:


import com.alibaba.druid.util.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.util.List;

public class Demo1 {
    public static void main(String[] args) {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<transaction>\n" +
                "<header>\n" +
                "    <ver>1.0</ver>\n" +
                "    <msg>\n" +
                "        <a>111</a>\n" +
                "        <b>222</b>\n" +
                "        <c>333</c>\n" +
                "    </msg>\n" +
                "    <status>\n" +
                "        <e>0000</e>\n" +
                "        <f>交易成功</f>\n" +
                "        <g>CCC</g>\n" +
                "    </status>\n" +
                "</header>\n" +
                "<body>\n" +
                "    <response>\n" +
                "        <msgInfoList>\n" +
                "            <row>\n" +
                "                <code>9874561230</code>\n" +
                "                <listInfo>\n" +
                "                    <file>\n" +
                "                        <id>DDD</id>\n" +
                "                        <appId>EEE</appId>\n" +
                "                        <name>FFF</name>\n" +
                "                        <path>A84CC33FB8A</path>\n" +
                "                    </file>\n" +
                "                    <file>\n" +
                "                        <id>DDD</id>\n" +
                "                        <appId>EEE</appId>\n" +
                "                        <name>GGG</name>\n" +
                "                        <path>99402005</path>\n" +
                "                    </file>\n" +
                "                </listInfo>\n" +
                "            </row>\n" +
                "            <row>\n" +
                "                <code>1235689</code>\n" +
                "                <listInfo/>\n" +
                "            </row>\n" +
                "        </msgInfoList>\n" +
                "    </response>\n" +
                "</body>\n" +
                "</transaction>";
        Document respDoc = null;
        String respXML = StringUtils.subString(xml, "<body>", "</body>");
        try {
            respDoc = DocumentHelper.parseText(respXML);
            Element rootElement = respDoc.getRootElement();//获取根节点元素 response
            Element msgInfoListEle = rootElement.element("msgInfoList");// 获取数组节点 msgInfoList
            List<Element> rowList = msgInfoListEle.elements("row");
            for (Element row : rowList) {
                Element codeEle = row.element("code");//单节点 code 元素对象
                System.out.println(codeEle.getText());//getText()方法获取并打印code值
                System.out.println("************************");
                Element listInfoEle = row.element("listInfo");//数组节点 listInfo 元素对象
                List<Element> fileList = listInfoEle.elements("file");
                for (Element file : fileList) {
                    //获取各节点对象
                    Element fileEle = file.element("id");
                    Element appIdEle = file.element("appId");
                    Element nameEle = file.element("name");
                    Element pathEle = file.element("path");
                    //getText()方法获取并获取各个节点对象的值
                    System.out.println(fileEle.getText());
                    System.out.println(appIdEle.getText());
                    System.out.println(nameEle.getText());
                    System.out.println(pathEle.getText());
                    System.out.println("-----------------");
                }
            }
        } catch (DocumentException e) {
            throw new RuntimeException(e);
        }
    }
}

执行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值