从SOAP消息中读取元素

时间:2016-08-17 07:09:40

标签: c# linq web-services soap

我试图阅读此xml邮件中的MyResult元素。尝试使用LINQ但无法读取<?xml version="1.0" encoding="utf-8" ?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <MyResponse xmlns="http://tempuri.org/"> <MyResult> <APP_TYPE>I</APP_TYPE> <APP_NO>152240</APP_NO> <APP_DATE>10/03/2016</APP_DATE> </MyResult> </MyResponse> </soap:Body> </soap:Envelope>

{{1}}

1 个答案:

答案 0 :(得分:1)

无法确定,因为您没有提供任何示例代码,但我认为您因为名称空间而烦恼。所以试试这个:

XmlDocument doc = new XmlDocument();
doc.Load("data.xml");
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("soap", "http://www.w3.org/2003/05/soap-envelope");
ns.AddNamespace("x", "http://tempuri.org/");

var result = doc.SelectSingleNode("//soap:Envelope/soap:Body/x:MyResponse/x:MyResult/x:APP_DATE", ns).InnerText;

为了更深入了解,您可以阅读this question

使用Linq就像这样:

var result = XDocument.Load("data.xml").Root
                      .Descendants(XName.Get("APP_DATE", "http://tempuri.org/"))
                      .FirstOrDefault()?.Value;

看看两个例子中我如何指定我正在寻找的名称空间