我在網上找了一圈,發現對SOAP回傳XML字串的決議方法都是用的xmldocument,
可是用習慣了linq to xml不想用xmldocument,請問用xdocument怎么決議下面這段?謝謝!
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getMaterialListResponse xmlns:ns2="http://erp.service.abc.com/">
<materialList>
<code>1AI6NF4H120A11303</code>
<length>10.0</length>
</materialList>
<materialList>
<code>1AI6NF4H120B11303</code>
<length>20.0</length>
</materialList>
<materialList>
<code>1AI4NF4H020BHH803</code>
<length>0.0</length>
</materialList>
</ns2:getMaterialListResponse>
</soap:Body>
</soap:Envelope>
uj5u.com熱心網友回復:
demo:
public Map<String,Object>map = new ConcurrentHashMap<String,Object>();
public Map parse(String soap) throws DocumentException{
Document doc = DocumentHelper.parseText(soap);//報文轉成doc物件
Element root = doc.getRootElement();//獲取根元素,準備遞回決議這個XML樹
getCode(root);
return map;
}
public void getCode(Element root){
if(root.elements()!=null){
List<Element>list = root.elements();//如果當前跟節點有子節點,找到子節點
for(Element e:list){//遍歷每個節點
if(e.elements().size()>0){
getCode(e);//當前節點不為空的話,遞回遍歷子節點;
}
if(e.elements().size()==0){
map.put(e.getName(), e.getTextTrim());
}//如果為葉子節點,那么直接把名字和值放入map
}
}
}
public static void main(String[] args) {
String soap = "StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+ "<soap:Body> <getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"
+ "<theCityName>" + city
+ "</theCityName> </getWeatherbyCityName>"
+ "</soap:Body></soap:Envelope>");
//初始化報文,呼叫parse方法,獲得結果map,然后按照需求取得欄位,或者轉化為其他格式
Map map = parse(soap.toString());
//獲得欄位s:SourceSysId的值;
String theCityName = map.get("theCityName").toString();
System.out.println("theCityName"+theCityName);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/277255.html
標籤:C#
