2009-11-30 88 views
5

我知道這是非常非常基本的,並被詢問了一千次,但由於某種原因,我無法讓它工作。使用C#Linq解析GML數據到XML

我有一個GML文件看起來像以下:

<?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> 

所有我需要能夠做的是閱讀每個GML X和Y:座標節點。我使用的是C#3.0和LINQ,因此它應該很容易,但是我嘗試的所有內容都只是返回空結果。

我只在VB中完成xml解析,所以C#方式對我來說目前有點不同。

感謝, 彌敦道

回答

7

我的猜測是,您還沒有命名空間。這是一個簡短但完整的程序,其中顯示所有的座標:

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

謝謝喬恩。就是這樣 – 2009-11-30 06:34:34