Чтение gml в c # - PullRequest
       52

Чтение gml в c #

6 голосов
/ 30 марта 2010

У меня проблема с чтением некоторых файлов gml в 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 ]

6 голосов
/ 30 марта 2010

Используйте XmlTextReader с XmlNamespaceManager. Смотрите пример на MSDN здесь: http://msdn.microsoft.com/en-us/library/system.xml.xmlnamespacemanager.xmlnamespacemanager.aspx

2 голосов
/ 30 марта 2010

Если вы не объявите пространство имен, связанное с префиксом "gml", ваш текст не является допустимым пространством имен Xml +.

Вы могли бы реализовать шаг предварительной обработки, который выполнял что-то вроде (псевдокод):

string text = ReadFromFile();
text = text.replace(" srsName=", " xmlns:gml=");
xmlDocument.LoadXml(text); 
1 голос
/ 30 марта 2010

Вы можете добавить свое пространство имен и набирать программно.

Загрузите файл в строку, используя File.ReadAllText(filename), добавьте необходимый тип и информацию о пространстве имен и проанализируйте его, используя XDocument.Parse вместо Load.

...