2009-11-30 1 views
5

So che questo è molto probabilmente molto semplice e mi è stato chiesto migliaia di volte, ma per qualche motivo non riesco a farlo funzionare.Analisi dei dati GML utilizzando C# Linq su XML

Ho un file GML che è simile al seguente:

<?xml version='1.0' encoding='UTF-8'?> 
<schema 
xmlns='http://www.w3.org/2000/10/XMLSchema' 
xmlns:gml='http://www.opengis.net/gml' 
xmlns:xlink='http://www.w3.org/1999/xlink' 
xmlns:xsi='http://www.w3.org/2000/10/XMLSchema-instance' 
xsi:schemaLocation='http://www.opengis.net/gml/feature.xsd'> 
<gml:Polygon srsName='http://www.opengis.net/gml/srs/epsg.xml#4283'> 
<gml:outerBoundaryIs> 
    <gml:LinearRing> 
    <gml:coord> 
    <gml:X>152.035953</gml:X> 
    <gml:Y>-28.2103190007845</gml:Y> 
    </gml:coord> 
    <gml:coord> 
    <gml:X>152.035957</gml:X> 
    <gml:Y>-28.2102020007845</gml:Y> 
    </gml:coord> 
    <gml:coord> 
    <gml:X>152.034636</gml:X> 
    <gml:Y>-28.2100120007845</gml:Y> 
    </gml:coord> 
    <gml:coord> 
    <gml:X>152.034617</gml:X> 
    <gml:Y>-28.2101390007845</gml:Y> 
    </gml:coord> 
    <gml:coord> 
    <gml:X>152.035953</gml:X> 
    <gml:Y>-28.2103190007845</gml:Y> 
    </gml:coord> 
    </gml:LinearRing> 
</gml:outerBoundaryIs> 
</gml:Polygon> 
</schema> 

Tutto quello che ho bisogno di essere in grado di fare è leggere il X e Y da ogni gml: nodo coord. Sto usando C# 3.0 e LINQ quindi dovrebbe essere facile ma tutto ciò che provo restituisce risultati vuoti.

Ho solo eseguito l'analisi XML in VB, quindi il modo C# è un po 'estraneo per me al momento.

Grazie, Nathan

risposta

7

La mia ipotesi è che non avete incluso lo spazio dei nomi. Ecco un breve ma completo programma che mostra tutte le coordinate:

using System; 
using System.Linq; 
using System.Xml.Linq; 

class Test 
{ 
    static void Main() 
    { 
     XDocument doc = XDocument.Load("test.xml"); 
     XNamespace gml = "http://www.opengis.net/gml"; 

     var query = doc.Descendants(gml + "coord") 
      .Select(e => new { X = (decimal) e.Element(gml + "X"), 
           Y = (decimal) e.Element(gml + "Y") }); 

     foreach (var c in query) 
     { 
      Console.WriteLine(c); 
     } 
    } 
} 
+0

Grazie Jon. Era così –