8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

Alper İnan 1月前

57 0

我正在用 C# 编写一个 GIS 客户端工具,用于从服务器检索基于 GML 的 XML 架构(示例如下)中的“特征”。提取限制为 100,000 个特征。我估计最大的 extract.xml

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

我估计最大的 extract.xml 可能会达到 150 兆字节左右,因此显然 DOM 解析器已经不行了,我一直在尝试在 XmlSerializer XSD.EXE 生成的绑定 --OR-- 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>
帖子版权声明 1、本帖标题:在 C# 代码中解析(大)XML 的最佳方法是什么?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Alper İnan在本站《parsing》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 只是想添加这个简单的扩展方法作为使用 XmlReader 的示例(正如 Mitch 回答的那样):

    public static bool SkipToElement (this XmlReader xmlReader, string elementName)
    {
        if (!xmlReader.Read ())
            return false;
    
        while (!xmlReader.EOF)
        {
            if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == elementName)
                return true;
    
            xmlReader.Skip ();
        }
    
        return false;
    }
    

    用法和样例:

    using (var xml_reader = XmlReader.Create (this.source.Url))
    {
        if (!SkipToElement (xml_reader, "Root"))
            throw new InvalidOperationException ("XML element \"Root\" was not found.");
    
        if (!SkipToElement (xml_reader, "Users"))
            throw new InvalidOperationException ("XML element \"Root/Users\" was not found.");
    
        ...
    }
    
返回
作者最近主题: