小编典典

在C#代码中解析(大)XML的最佳方法是什么?

c#

我正在用C#语言编写GIS客户端工具,以从服务器中检索基于GML的XML模式(以下示例)中的“功能”。提取限制为100,000个功能。

我guestimate,最大的 extract.xml
可能起床约150兆字节,所以显然DOM解析器是出我一直在试图决定之间的XmlSerializerXSD.EXE生成绑定-或-
的XmlReader和手工制作的对象图。

或者,也许还有一种我还没有考虑过的更好的方法?像XLINQ还是????

有人可以指导我吗?特别是关于任何给定方法的存储效率。如果不是这样,我将不得不“原型化”这两个解决方案并并排介绍它们。

我对.NET有点不了解。任何指导将不胜感激。

感谢您。基思


XML示例 -最多100,000个,每个功能最多234,600个坐标。

<feature featId="27168306" fType="vegetation" fTypeId="1129" fClass="vegetation" gType="Polygon" ID="0" cLockNr="51598" metadataId="51599" mdFileId="NRM/TIS/VEGETATION/9543_22_v3" dataScale="25000">
  <MultiGeometry>
    <geometryMember>
      <Polygon>
        <outerBoundaryIs>
          <LinearRing>
            <coordinates>153.505004,-27.42196 153.505044,-27.422015 153.503992 .... 172 coordinates omitted to save space ... 153.505004,-27.42196</coordinates>
          </LinearRing>
        </outerBoundaryIs>
      </Polygon>
    </geometryMember>
  </MultiGeometry>
</feature>

阅读 315

收藏
2020-05-19

共1个答案

小编典典

使用XmlReader解析大型XML文档。XmlReader提供对XML数据的快速,仅转发,非缓存访问。(仅向前意味着您可以从头到尾读取XML文件,但不能在文件中向后移动。)XmlReader使用少量内存,这等效于使用简单的SAX阅读器。

    using (XmlReader myReader = XmlReader.Create(@"c:\data\coords.xml"))
    {
        while (myReader.Read())
        {
           // Process each node (myReader.Value) here
           // ...
        }
    }

您可以使用XmlReader来处理最大2 GB的文件。

参考:如何使用Visual C#从文件读取XML

2020-05-19