【问题标题】:Reading gml in c#在 C# 中读取 gml
【发布时间】:2010-03-30 14:15:10
【问题描述】:

我在读取 c# 中的一些 gml 文件时遇到问题。我的文件没有架构或命名空间,看起来像来自这个问题的文件:

Parsing GML data using C# Linq to 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 文件,因此我不想将架构和命名空间添加到我的所有文件中。有人知道如何阅读我的文件吗?

【问题讨论】:

    标签: c# xml gml-geographic-markup-lan


    【解决方案1】:

    将 XmlTextReader 与 XmlNamespaceManager 一起使用。在此处查看 MSDN 上的示例:http://msdn.microsoft.com/en-us/library/system.xml.xmlnamespacemanager.xmlnamespacemanager.aspx

    【讨论】:

      【解决方案2】:

      除非您声明与“gml”前缀关联的命名空间,否则您的文本不是有效的 Xml + 命名空间。

      您可以实现一个预处理步骤,执行类似(伪代码)的操作:

      string text = ReadFromFile();
      text = text.replace(" srsName=", " xmlns:gml=");
      xmlDocument.LoadXml(text); 
      

      【讨论】:

        【解决方案3】:

        您可以添加命名空间并以编程方式键入。

        使用File.ReadAllText(filename) 将您的文件加载到一个字符串中,附加必要的类型和命名空间信息并使用XDocument.Parse 而不是Load 对其进行解析。

        【讨论】:

          猜你喜欢
          • 2015-05-11
          • 2018-02-04
          • 1970-01-01
          • 1970-01-01
          • 2019-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-14
          相关资源
          最近更新 更多