2013-12-02 4 views
-1

Я должен прочитать SOAP ответ из файла нижеЧтение SOAP XML ответ

<?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> 

мне нужно содержание текста тега только CServiceData::SetPropertyValue failed;

+3

Почему бы вам просто не использовать «Добавить ссылку на службу»? См. «[Как использовать веб-службу] (http://johnwsaunders3.wordpress.com/2009/05/17/how-to-consume-a-web-service/)». –

+1

В чем вопрос? –

ответ

0

Вы можете использовать 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; 
} 
Смежные вопросы