简介
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;
}
···