I am trying to use LINQ to XML in an with the XDocument object. How do you query the result element in the example below?
serv
in your XML is a namespace prefix. It has to be associated with some URI, that identifies the namespace. Look for an attribute like this in your XML:
xmlns:serv="..."
The value inside the quotes will be the namespace. Now, in your C# code, you use that URI to create an XNamespace
object:
private static readonly XNamespace serv = "...";
And then you can use that in queries like this:
string value = doc
.Descendants(serv + "header").First()
.Descendants(serv + "response").First()
.Descendants(serv + "result").First()
.Value;
By the way, you should consider using .Element()
rather than .Descendants().First()
.
That colon means that the XML is using namespaces. Based on this blogpost someone posted about LINQ, XML, and namespaces, here's a version of your code that you might want to try.:
static XName serv(string name)
{
return XNamespace.Get("<THE_NAMESPACE_URL>") + name;
}
XDocument doc = XDocument.Parse(xml);
string value = doc.Descendants(serv("header")).First().Descendants(serv("response")).First().Descendants(serv("result")).First().Value;