6

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

使用 C# Linq to XML 解析 GML 数据

只有这样的模式:

<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 文件,所以我不想将架构和命名空间添加到我的所有文件中。有人知道如何阅读我的文件吗?

4

3 回答 3

6

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

于 2010-03-30T14:21:52.387 回答
2

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

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

string text = ReadFromFile();
text = text.replace(" srsName=", " xmlns:gml=");
xmlDocument.LoadXml(text); 
于 2010-03-30T14:20:11.813 回答
1

您可以以编程方式添加命名空间和类型。

使用 将文件加载到字符串中File.ReadAllText(filename),附加必要的类型和命名空间信息,并使用XDocument.Parse而不是Load.

于 2010-03-30T14:19:25.783 回答