我收到来自Web服务的SOAP信封响应,如下所示:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
  <ProcessTranResponse xmlns="http://www.polaris.co.uk/XRTEService/2009/03/">
    <ProcessTranResult xmlns:a="http://schemas.datacontract.org/2004/07/XRTEService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <a:PrintFormFileNameContents i:nil="true"/>
      <a:ResponseXML>response_message</a:ResponseXML>
    </ProcessTranResult>
  </ProcessTranResponse>
</s:Body>




我想将response_message转换为字符串变量。我试着做

XDocument doc = XDocument.Parse(Response);
XNamespace xmlnsa = "http://schemas.datacontract.org/2004/07/XRTEService";
var ResponseXML = doc.Descendants(xmlnsa + "ResponseXML");


当我使用watch时,我会在ResponseXML -> Results View[0] -> Value我的response_message中看到,但我不知道下一步该怎么做才能从C#中获得Value。

最佳答案

XContainer.Descendants返回元素的集合。然后,您应该尝试以下操作:

foreach (XElement el in ResponseXML)
{
    Console.WriteLine(el.Value);
}


或者,如果您知道总是只有一个响应,则可以执行以下操作:

XDocument doc = XDocument.Parse(Response);

XNamespace xmlnsa = "http://schemas.datacontract.org/2004/07/XRTEService";

XElement ResponseXML = (from xml in XMLDoc.Descendants(xmlnsa + "ResponseXML")
                        select xml).FirstOrDefault();

string ResponseAsString = ResponseXML.Value;

关于c# - 从C#中的SOAP信封中提取XML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12818248/

10-11 11:17