dom4j 對含有名稱空間的xml進行解析
待解析xml報文
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns1:queryBalanceBonResponse xmlns:ns1="http://chinasoftinc.com/BonWebservice/">
<result>0</result>
<errorCode>0</errorCode>
<errorMessage >查詢餘額成功</errorMessage>
<paymentFlag>0</paymentFlag>
<totalBalanceAvailable>20</totalBalanceAvailable>
<balanceDetail>
<balanceInfo>
<balanceTypeFlag>0</balanceTypeFlag>
<BalanceAvailable >20</BalanceAvailable>
</balanceInfo>
<balanceInfo>
<balanceTypeFlag>1</balanceTypeFlag>
<BalanceAvailable>0</BalanceAvailable>
</balanceInfo>
</balanceDetail>
</ns1:queryBalanceBonResponse >
</soapenv:Body>
</soapenv:Envelope>
報文對應的bean
QueryModel .java
package cn.com.min.dom4j;
import java.util.ArrayList;
import java.util.List;
public class QueryModel {
private String result ="";
private String errorCode ="";
private String errorMessage ="";
private String paymentFlag ="";
private String totalBalanceAvailable ="";
private List<BalanceInfoListModel> balanceInfos =new ArrayList<BalanceInfoListModel>();
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public String getPaymentFlag() {
return paymentFlag;
}
public void setPaymentFlag(String paymentFlag) {
this.paymentFlag = paymentFlag;
}
public String getTotalBalanceAvailable() {
return totalBalanceAvailable;
}
public void setTotalBalanceAvailable(String totalBalanceAvailable) {
this.totalBalanceAvailable = totalBalanceAvailable;
}
public List<BalanceInfoListModel> getBalanceInfos() {
return balanceInfos;
}
public void setBalanceInfos(List<BalanceInfoListModel> balanceInfos) {
this.balanceInfos = balanceInfos;
}
}
BalanceInfoListModel.java
package cn.com.min.dom4j;
public class BalanceInfoListModel {
private String balanceTypeFlag = "";
private String BalanceAvailable = "";
public String getBalanceTypeFlag() {
return balanceTypeFlag;
}
public void setBalanceTypeFlag(String balanceTypeFlag) {
this.balanceTypeFlag = balanceTypeFlag;
}
public String getBalanceAvailable() {
return BalanceAvailable;
}
public void setBalanceAvailable(String balanceAvailable) {
BalanceAvailable = balanceAvailable;
}
}
解析類
XML2Bean.java
package cn.com.min.dom4j;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
public class XML2Bean {
public static String getNotNullNodeValue(Node n) {
return getNotNullNodeValue(n, null);
}
public static String getNotNullNodeValue(Node n, String valueType) {
if (n == null)
return "";
else
return n.getStringValue().trim();
}
public static QueryModel xmlToQueryModel(String xml) throws DocumentException{ //異常直接丟擲去了
Map map = new HashMap();
Document doc = DocumentHelper.parseText(xml);
QueryModel queryModel =new QueryModel();
Element rootElrm= doc.getRootElement();
// map.put("soapenv","http://schemas.xmlsoap.org/soap/envelope/");
// map.put("ns1","http://chinasoftinc.com/BonWebservice/");
Element el = rootElrm.element("Body");
Element node = el.element("queryBalanceBonResponse");
System.out.println(node.asXML());
// XPath x = doc.createXPath("//soapenv:Body/ns1:queryBalanceBonResponse");
// x.setNamespaceURIs(map);
// List nodelist = x.selectNodes(doc);
// Node node = (Node) nodelist.get(0);
//System.out.println(node.asXML());
//queryModel.setErrorCode(XML2Bean.getNotNullNodeValue(node.selectSingleNode("result")));
//System.out.println(node.selectSingleNode("result").getText());
queryModel.setResult(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorCode")));
queryModel.setErrorMessage(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorMessage")));
queryModel.setPaymentFlag(XML2Bean.getNotNullNodeValue(node.selectSingleNode("paymentFlag")));
queryModel.setTotalBalanceAvailable(XML2Bean.getNotNullNodeValue(node.selectSingleNode("totalBalanceAvailable")));
List<Node> nodes = node.selectNodes("balanceDetail/balanceInfo");
if (nodes != null && nodes.size()>0) {
List<BalanceInfoListModel> balanceInfos =new ArrayList<BalanceInfoListModel>();
for(Node nod :nodes){
BalanceInfoListModel balanceInfoListModel = new BalanceInfoListModel();
balanceInfoListModel.setBalanceTypeFlag(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("balanceTypeFlag")));
balanceInfoListModel.setBalanceAvailable(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable")));
System.out.println("-->"+XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable")));
System.out.println("-->"+nod.selectSingleNode("balanceTypeFlag").getText());
balanceInfos.add(balanceInfoListModel);
}
queryModel.setBalanceInfos(balanceInfos);
}
return queryModel;
}
public static void main(String[] args) {
String xml1 ="<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'><soapenv:Body><ns1:queryBalanceBonResponse xmlns:ns1='http://chinasoftinc.com/BonWebservice/'><result>0</result><errorCode>0</errorCode><errorMessage>查詢餘額成功</errorMessage><paymentFlag>0</paymentFlag><totalBalanceAvailable>20</totalBalanceAvailable><balanceDetail><balanceInfo><balanceTypeFlag>0</balanceTypeFlag><BalanceAvailable>200</BalanceAvailable></balanceInfo><balanceInfo><balanceTypeFlag>1</balanceTypeFlag><BalanceAvailable>0</BalanceAvailable></balanceInfo></balanceDetail></ns1:queryBalanceBonResponse></soapenv:Body></soapenv:Envelope>";
try {
QueryModel queryModel = XML2Bean.xmlToQueryModel(xml1);
System.out.println(queryModel.getErrorCode());
} catch (DocumentException e) {
System.out.println(e);
}
}
}
以上原始碼可直接使用
其中主要的解析方法 public static QueryModelxmlToQueryModel(String xml)
其中使用兩種方式進行含名稱空間的xml進行解析
public static QueryModel xmlToQueryModel(String xml) throws DocumentException{ //異常直接丟擲去了
Document doc = DocumentHelper.parseText(xml);
QueryModel queryModel =new QueryModel();
Element rootElrm= doc.getRootElement();
Element el = rootElrm.element("Body");
Element node = el.element("queryBalanceBonResponse");
System.out.println(node.asXML());
queryModel.setErrorCode(XML2Bean.getNotNullNodeValue(node.selectSingleNode("result")));
queryModel.setResult(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorCode")));
queryModel.setErrorMessage(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorMessage")));
queryModel.setPaymentFlag(XML2Bean.getNotNullNodeValue(node.selectSingleNode("paymentFlag")));
queryModel.setTotalBalanceAvailable(XML2Bean.getNotNullNodeValue(node.selectSingleNode("totalBalanceAvailable")));
List<Node> nodes = node.selectNodes("balanceDetail/balanceInfo");
if (nodes != null && nodes.size()>0) {
List<BalanceInfoListModel> balanceInfos =new ArrayList<BalanceInfoListModel>();
for(Node nod :nodes){
BalanceInfoListModel balanceInfoListModel = new BalanceInfoListModel();
balanceInfoListModel.setBalanceTypeFlag(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("balanceTypeFlag")));
balanceInfoListModel.setBalanceAvailable(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable")));
System.out.println("-->"+XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable")));
System.out.println("-->"+nod.selectSingleNode("balanceTypeFlag").getText());
balanceInfos.add(balanceInfoListModel);
}
queryModel.setBalanceInfos(balanceInfos);
}
return queryModel;
}
public static QueryModel xmlToQueryModel(String xml) throws DocumentException{ //異常直接丟擲去了
Map map = new HashMap();
Document doc = DocumentHelper.parseText(xml);
QueryModel queryModel =new QueryModel();
Element rootElrm= doc.getRootElement();
map.put("soapenv","http://schemas.xmlsoap.org/soap/envelope/");
map.put("ns1","http://chinasoftinc.com/BonWebservice/");
XPath x = doc.createXPath("//soapenv:Body/ns1:queryBalanceBonResponse");
x.setNamespaceURIs(map);
List nodelist = x.selectNodes(doc);
Node node = (Node) nodelist.get(0);
queryModel.setErrorCode(XML2Bean.getNotNullNodeValue(node.selectSingleNode("result")));
queryModel.setResult(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorCode")));
queryModel.setErrorMessage(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorMessage")));
queryModel.setPaymentFlag(XML2Bean.getNotNullNodeValue(node.selectSingleNode("paymentFlag")));
queryModel.setTotalBalanceAvailable(XML2Bean.getNotNullNodeValue(node.selectSingleNode("totalBalanceAvailable")));
List<Node> nodes = node.selectNodes("balanceDetail/balanceInfo");
if (nodes != null && nodes.size()>0) {
List<BalanceInfoListModel> balanceInfos =new ArrayList<BalanceInfoListModel>();
for(Node nod :nodes){
BalanceInfoListModel balanceInfoListModel = new BalanceInfoListModel();
balanceInfoListModel.setBalanceTypeFlag(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("balanceTypeFlag")));
balanceInfoListModel.setBalanceAvailable(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable")));
System.out.println("-->"+XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable")));
System.out.println("-->"+nod.selectSingleNode("balanceTypeFlag").getText());
balanceInfos.add(balanceInfoListModel);
}
queryModel.setBalanceInfos(balanceInfos);
}
return queryModel;
}
其中主要用的用到兩個java包
dom4j-1.6.1.jar
jaxen-1.1.1.jar
相關推薦
dom4j 對含有名稱空間的xml進行解析
待解析xml報文 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <
[MyBatis] Mapper.xml中的名稱空間及命名解析
Mapper.xml相關使用 名稱空間(Namespaces) 名稱空間(Namespaces) 在之前版本的MyBatis中是可選的,這樣容易引起混淆因此毫無益處。現在名稱空間則是必須的,且易於簡單地用更長的完完全限定名來隔離語句。 名稱空間使得你所見到的介面繫結成為可能,
dom4j結合xpath獲取多名稱空間xml中指定id、指定屬性節點
在上一篇中提到,如果xml文件中有namespace的情況,如果沒有手動設定namespace的話,是獲取不到節點資料的。那麼要怎麼獲取多個namesapce的xml文件中,指定的id的指定名稱的屬性。 具體情況如下 : spring配置檔案下有多個名稱空間
html--對URL傳參數進行解析
-- earch com turn indexof repl span 需要 lac 跳轉頁面需要傳參數到另外一個html頁面,跳轉鏈接可寫一個js的function function doView(articleId) { window.location.hre
面向對象 名稱空間和組合
類之間的關系 dbo 實現 area home python ice end style 類名稱空間與對象的名稱空間 創建一個類就會創建一個類的名稱空間,用來存儲類中定義的所有名字,這些名字稱為類的屬性 而類有兩種屬性:靜態屬性和動態屬性 靜態屬性就是直接在類
DOM,SAX,JDOM,DOM4J優缺點比較及生產xml和解析xml
下載必要的jar包: activation.jar commons-logging-1.0.4.jar dom4j-1.6.1.jar jaxen-1.1.1.jar jdom-1.0.jar 一、DOM 解析器讀入整個文件,然後構建一個駐留記憶體的樹結構,使用 DOM 介
利用DateFormat、Date、Calendar等類 對含有時間的字串進行提取和計算
在時間提取方面我用了三種方法,最開始使用的是正則表示式,很簡潔, 之後使用的是Date類中的方法,但這種方法都已過時, 最後使用的是Calendar類的方法。、 我推薦使用正則表示式,簡潔實用; package cn.hanfeng.example13_6; imp
iOS 對kml檔案內資料進行解析並在地圖上繪製(二)
這是我寫好的demo, 有解析工具和資料解析的思路. 提供一個參考! kml檔案其中的一種格式, 如下展示的 <Placemark> <name>001&
型別配置名稱空間 —— XML schema
對於基於 XML 的配置,Spring 2.0 以後告別 DTD 格式(Document Type Definition)的配置檔案,開始採用 Schema 格式,Schema 的突出亮點即是可讓不同型別的配置擁有自己的名稱空間(namespace),使得配置檔
對PHP名稱空間的理解
最早的PHP是沒有名稱空間的,所有PHP程式碼存在同一個名稱空間之下,這樣的話就不能存在相同的類或者相同的函式。但是當我們的工程越來越大的時候,由此產生的衝突會越來越多。 PHP5.3之後增加了對名稱空間的支援,宣告名稱空間名使用namespace+名稱
dom4j解析xml基本方法以及當xml中存在名稱空間時的三種處理辦法
使用SAXReader需要匯入dom4j-full.jar包。 dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的。dom4j是一個非常非常優秀的Java XML API,具有效能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體,可以在SourceFo
Dom4j解析帶有名稱空間的XML檔案
今天我在解析KML檔案的過程中,使用XPath表示式,可是返回的結果總是null,糾結了很久,後來通過查資料,發現是我的KML中有名稱空間的緣故。 首先,說明一些什麼是KML,因為下面的例子中會用到KML。KML是Keyhole Markup Languag
使用pull方式和sax方式對xml文件進行解析
tostring 需要 nts tag .com version thp response pri 這是我自己設置的xml文件 用一下方式獲取它的內容 try{ OkHttpClient client = new OkHttpClient(); Request
【XML解析】(1)Java下使用JAXP中的DOM解析方式對XML文件進行解析
關於JAXP、DOM、SAX: 何為JAXP? JAXP(JavaApi for Xml Programming) – sun公司的一套操作XML的API。 JAXP中分為三種解析方式: DOM解析、SAX解析、StAX
使用dom4j對xml檔案進行讀取和輸出操作
1.xml檔案的讀取 讀取xml檔案的方式有兩種,一種是面向模型的DOM方式,一種是面向事件的SAX方式 DOM方式原理:一次性的將xml文件加入記憶體,在記憶體中形成一顆dom樹,然後通過語言對樹的節點進行操作。 顯然這種操作查詢元素快,但
java 使用DOM4J對XML檔案進行增刪改查操作
原始碼: DOM4j.java package com.zc.homeWork19; import java.io.FileWriter; import java.util.ArrayList; import java.util.Iterator; i
dom4j 為生成 XML 的檔案新增 xmlns(名稱空間) 屬性
今天在開發sitemap地圖時遇到一個小小問題,就是xmlns屬性的新增!我們知道sitmap 根結點有一些屬性!大體如下: <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:x
當 xml中存在名稱空間,三種處理辦法(dom4j)
{ Map map = new HashMap(); map.put( " design " , " http://www.eclipse.org/birt/2005/design " ); SAXReader saxReader = new SAX
DOM與DOM4J對XML檔案的解析
package com.freshbin.domtest.test; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.Docum
使用Dom4j對XML文檔創建與解析
body 設置 文檔 lazy write cat equal parse 進行 創建XML文件: public class Dom4jCreateXml { public void testCreatXml() { //創建文檔對象