在c#中从SOAP信封中提取XML

时间:2012-10-10 11:28:34

标签: c# xml soap

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

<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");

当我使用手表时,我会在ResponseXML -> Results View[0] -> Value我的response_message中看到,但我无法弄清楚从C#获取价值的下一步是什么。

2 个答案:

答案 0 :(得分:2)

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;

答案 1 :(得分:1)

您可以使用多种解决方案来满足您的目的,同时您可能想要介绍xml内容的结构。

静态态度

你可以简单地使用它:

XmlDocument _doc = new XmlDocument();
doc.LoadXml(_stream.ReadToEnd());

然后用以下内容找到所需的数据:

doc.LastChild.FirstChild.FirstChild.LastChild.InnerText;

阅读xml结构

通过查看extracting-data-from-a-complex-xml-with-linq

,您可以编写一些额外的代码行来引入名称空间和其他xml内容来查找/映射可用数据