Чтение gml в C#
У меня проблема с чтением некоторых файлов XML в C#. Мои файлы не имеют схемы или пространства имен и выглядят как файл из этого вопроса:
Разбор данных GML с использованием C# Linq в XML
только без схемы вот так:
<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>
Когда я пытаюсь прочитать документ с помощью метода XDocument.Load, я получаю исключение: 'gml' namespace is not defined
,
У меня много файлов gml, поэтому я не хочу добавлять схему и пространства имен ко всем моим файлам. Кто-нибудь знает, как читать мои файлы?
3 ответа
Используйте XmlTextReader с XmlNamespaceManager. Посмотрите пример на MSDN здесь: http://msdn.microsoft.com/en-us/library/system.xml.xmlnamespacemanager.xmlnamespacemanager.aspx
Если вы не объявите пространство имен, связанное с префиксом "gml", ваш текст будет недопустимым пространством имен Xml +.
Вы могли бы реализовать шаг предварительной обработки, который делал что-то вроде (псевдокод):
string text = ReadFromFile();
text = text.replace(" srsName=", " xmlns:gml=");
xmlDocument.LoadXml(text);
Вы можете добавить свое пространство имен и набирать программно.
Загрузите ваш файл в строку, используя File.ReadAllText(filename)
, добавьте необходимую информацию о типе и пространстве имен и проанализируйте ее, используя XDocument.Parse
вместо Load
,