Чтение 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,

Другие вопросы по тегам