请教linq to xml解析SOAP返回XML字符串

leon51 2021-04-17 11:56:06
我在网上找了一圈,发现对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>
...全文
210 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
morliz子轩 2021-04-18
  • 打赏
  • 举报
回复
你要的是Java实现方法?真能整,标题又不说明
leon51 2021-04-18
  • 打赏
  • 举报
回复
引用 1 楼 morliz子轩 的回复:
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);

}


是Java,而且找不到DocumentHelper
morliz子轩 2021-04-17
  • 打赏
  • 举报
回复
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);

}


111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧