Разбор данных GML с использованием C# Linq в XML
Я знаю, что это, скорее всего, очень просто, и меня спрашивали тысячу раз, но по какой-то причине я просто не могу заставить его работать.
У меня есть файл XML, который выглядит следующим образом:
<?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>
Все, что мне нужно, это прочитать X и Y с каждого узла gml:ordin. Я использую C# 3.0 и LINQ, так что это должно быть легко, но все, что я пытаюсь, просто возвращает пустые результаты.
Я сделал только разбор xml в VB, так что путь C# сейчас немного чужд для меня.
Спасибо Натан
1 ответ
Решение
Я предполагаю, что вы не включили пространство имен. Вот короткая, но полная программа, которая показывает все координаты:
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);
}
}
}