2016-08-09 164 views
0

Ich rufe einen UPS-Webdienst an, um den Versand zu berechnen, und im Falle einer ungültigen Adresse gibt der Serviceaufruf eine SoapException zurück.Wählen Sie ein untergeordnetes Element von SoapException.Detail.InnerXML

Der Soap hat eine Detail.InnerXMl Eigenschaft mit dem folgenden XML:

<err:Errors xmlns:err=\"http://www.ups.com/XMLSchema/XOLTWS/Error/v1.1\"> 
    <err:ErrorDetail> 
     <err:Severity>Hard</err:Severity> 
     <err:PrimaryErrorCode> 
      <err:Code>111286</err:Code> 
      <err:Description>CAa is not a valid state for the specified shipment.</err:Description> 
     </err:PrimaryErrorCode> 
    </err:ErrorDetail> 
</err:Errors> 

Ich möchte den Text aus dem <Description> Element extrahieren.

Warum sollte dies nicht funktionieren:

try 
{ 
} 
catch (SoapException ex) 
{ 
    XmlNode node = ex.Detail.SelectSingleNode("//Description"); 
    //node is null 
} 

Antwort

0

die XML leicht mit LinqToXml analysieren:

var errors = XDocument.Parse(yourxmlstring) 
       .Descendants("errors") 
       .Select(e => new 
       { 
        code = (int)e.Element("code"), 
        desc = (string)e.Element("description") 
       }) 
       .ToList(); 
+0

Diese Liste Größe 0 zurück, Sie mit 'ex.Detail.InnerXML' anstelle von 'yourxmlstring' –

+0

' yourxmlstring' sollte Ihre vollständige 'SoapException' Antwortnachricht enthalten. –