2009-11-30 63 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