【问题标题】:Reading SOAP xml answer阅读 SOAP xml 答案
【发布时间】:2013-12-02 15:21:02
【问题描述】:

我必须从下面的文件中读取 SOAP 答案

<?xml version="1.0"?>
<Envelopes>
 <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
  <env:Body>
  <env:Fault>
   <env:Code>
    <env:Value>env:Receiver</env:Value>
    <env:Subcode>
     <env:Value>-1</env:Value>
    </env:Subcode>
   </env:Code>
  <env:Reason>
   <env:Text xml:lang="en">CServiceData::SetPropertyValue failed; '</env:Text>
 </env:Reason>
 <env:Detail>
<Object>4</Object>
<ObjectIndex>1</ObjectIndex>
<Command>AddObject</Command>
<SessionID>B8FE2330-4252-4BB1-A3EE-053F4413A0C0</SessionID>
 </env:Detail>
</env:Fault>
</env:Body>
</env:Envelope>
</Envelopes>

我只需要Text标签CServiceData::SetPropertyValue failed;的内容

【问题讨论】:

标签: c# xml soap


【解决方案1】:

你可以使用XPath:

public string GetErrorMessage(string xml)
{
    using (StringReader sr = new StringReader(xml))
    {
        var doc = new XPathDocument(sr);
        var nav = doc.CreateNavigator();
        var xmlNs = new XmlNamespaceManager(nav.NameTable);
        xmlNs.AddNamespace("env", @"http://www.w3.org/2003/05/soap-envelope");
        var node = nav.SelectSingleNode("//env:Text", xmlNs);
        return node.Value;
    }
}

或者你可以使用LINQ To XML:

public string GetErrorMessage(string xml)
{
    var doc = XDocument.Parse(xml);
    var node = doc.Descendants(XName.Get("Text", @"http://www.w3.org/2003/05/soap-envelope"))
                  .FirstOrDefault();
    return node.Value;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-02
    • 2016-11-18
    • 2011-07-29
    • 1970-01-01
    • 2017-05-13
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多