2009-11-30 49 views
5

Tôi biết điều này là rất cơ bản và được hỏi hàng nghìn lần nhưng vì một lý do nào đó tôi không thể làm việc đó.Phân tích cú pháp dữ liệu GML bằng cách sử dụng C# LINQ to XML

Tôi có một tập tin GML trông giống như sau:

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

Tất cả tôi cần để có thể làm là đọc các X và Y từ mỗi GML: nút coord. Tôi đang sử dụng C# 3.0 và LINQ vì vậy nó phải được dễ dàng, nhưng tất cả mọi thứ tôi cố gắng chỉ trả về kết quả sản phẩm nào.

Tôi chỉ thực hiện phân tích cú pháp xml trong VB nên cách C# hơi lạ với tôi vào lúc này.

Cảm ơn, Nathan

Trả lời

7

tôi đoán là bạn đã không bao gồm các không gian tên. Đây là một chương trình ngắn nhưng đầy đủ hiển thị tất cả các coords:

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

Cảm ơn Jon. Điều đó là vậy đó –

Các vấn đề liên quan