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);
}
}
}
执行结果如下: