MyDaftQuestions
MyDaftQuestions

Reputation: 4691

Cannot query XML document using XDocument and get desired results

I'm trying to use the Bing maps API, which returns an XML document. The document (simplified but keeping structure) is

<Response xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://schemas.microsoft.com/search/local/ws/rest/v1">
    <StatusCode>
    200
    </StatusCode>
    <ResourceSets>
      <ResourceSet>
       <Resources>
        <TrafficIncident>
         <Severity>
          Minor
         </Severity>
         <RoadClosed>
          false
         </RoadClosed>
        </TrafficIncident>
       </Resources>
      </ResourceSet>
     </ResourceSets>
</Response>

In this case, there is only 1 traffic issue but there could be many.

I'm trying to extract if the road is closed and the severity

The XML is stored in a xd object (of type XDocuement)

The following works fine (no error but returns all the elements)

var allNodes = (from x in xd.Descendants()
                select x).ToList();

but if I add an element name then it returns a list with 0 items

var allNodes = (from x in xd.Descendants("Resources")
                select x).ToList(); 

I thought the above code is saying:

from xd, grab all of the descendants of the "Resources" element

If my understanding is correct, why does it return 0 results

Upvotes: 2

Views: 84

Answers (2)

helb
helb

Reputation: 7773

You must include your (default) XML namespace like so:

var name = XName.Get("Resources", "http://schemas.microsoft.com/search/local/ws/rest/v1");
var allNodes = (from x in xd.Descendants(name)
                select x).ToList(); 

Upvotes: 2

Axel Heer
Axel Heer

Reputation: 1883

You must not forget the XML Namespace.

XNamespace search = "http://schemas.microsoft.com/search/local/ws/rest/v1";

var allNodes = (from x in xd.Descendants(search + "Resources")
                select x).ToList();

Upvotes: 2

Related Questions