2017-09-23 4 views
1

Ich versuche, Werte von xml respone zu erhalten:C# erhalten Werte von XML-Antwort

<?xml version="1.0" encoding="utf-8"?> 
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://adaddaasd.com"> 
<A>14</A> 
<B>Failed</B> 
<C>22</C> 
</Response> 

Mein Code ist:

string responseString = await response.Content.ReadAsStringAsync(); 

var xDocument = XDocument.Parse(responseString); 

var responseNode = xDocument.XPathSelectElement("/Response"); 
var A = xDocument.XPathSelectElement("/Response/A"); 

Aber ich NULL-Werte für A und responseNode bekommen. Was ist los mit dir? Dank

+0

Versuchen Sie 'var A = xDocument.XPathSelectElement ("/A ");' –

+0

Hat nicht funktioniert, immer noch Null –

Antwort

2

Sie sind eklatant den XML-Namespace ignorieren, die in Ihrem XML-Dokument definiert ist:

<Response xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
      xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
      xmlns='http://adaddaasd.com'> 
      **************************** 

Sie müssen die in Ihrem anfragende aufzunehmen - ich würde versuchen, es so zu tun:

var xDocument = XDocument.Parse(responseString); 

// *define* your XML namespace! 
XNamespace ns = "http://adaddaasd.com"; 

// get all the <Response> nodes under the root with that XML namespace 
var responseNode = xDocument.Descendants(ns + "Response"); 

// from the first <Response> node - get the descendant <A> nodes 
var A = responseNode.FirstOrDefault()?.Descendants(ns + "A"); 

Wenn Sie darauf bestehen, die XPathSelectElement Methode verwenden, dann müssen Sie ein XmlNamespaceManager und verwenden Sie es in Ihrem XPath auswählen definieren:

// define your XML namespaces 
XmlNamespaceManager xmlnsmgr = new XmlNamespaceManager(new NameTable()); 
xmlnsmgr.AddNamespace("ns", "http://adaddaasd.com"); 

// use the defined XML namespace prefix in your XPath select 
var A = xDocument.XPathSelectElement("/ns:Response/ns:A", xmlnsmgr); 
+0

Wow wusste nicht, dass es auch zählt. Vielen Dank :) –