Kefala
Kefala

Reputation: 100

Resolve multiple namespace

How would I get the XElement for the "HR" and "Cad" nodes in the following XML file:

<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="StravaGPX" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd">
   <metadata>
      <time>2011-07-16T13:39:22Z</time>
   </metadata>
   <trk>
      <name>07/16/2011 Toronto, ON, Canada</name>
      <trkseg>
         <trkpt lat="43.7076220" lon="-79.3164530">
            <ele>138.4</ele>
            <time>2011-07-16T13:39:22Z</time>
            <extensions>
               <gpxtpx:TrackPointExtension>
                  <gpxtpx:hr>124</gpxtpx:hr>
                  <gpxtpx:cad>90</gpxtpx:cad>
               </gpxtpx:TrackPointExtension>
            </extensions>
         </trkpt>
      </trkseg>
   </trk>
</gpx>

I can resolve the element with the following code:

loaded.Descendants("{http://www.topografix.com/GPX/1/1}trkpt") // Where 'loaded' is the XDocument

but when I look at the element in the debugger it only shows me the <ele> and <time> elements and ignores the <TrackPointExtension> and <extension> elements that are descendants.

Thx in advance!

Upvotes: 2

Views: 124

Answers (1)

har07
har07

Reputation: 89305

It isn't very clear how you used debugger to check, but as far as I can see there should be no descendant of selected node ignored by debugger.

To select an element from XML having multiple namespace prefixes, you just need to use right XNamespace prefix for right element, for example :

XNamespace ns = "http://www.topografix.com/GPX/1/1";
XNamespace gpx = "http://www.garmin.com/xmlschemas/TrackPointExtension/v1";
var trackPointExt = doc.Root
                       .Element(ns+"trk")
                       .Element(ns+"trkseg")
                       .Element(ns+"trkpt")
                       .Element(ns+"extensions")
                       .Element(gpx+"TrackPointExtension");
var hr = (int)trackPointExt.Element(gpx+"hr");
var cad = (int)trackPointExt.Element(gpx+"cad");
Console.WriteLine(hr);
Console.WriteLine(cad);

Upvotes: 1

Related Questions