从巨大的xml文件中获取数据,而无需加载到内存中.c#.

本文关键字:加载 内存 数据 巨大 xml 文件 获取 | 更新日期: 2023-09-27 18:31:05

我有一个具有以下模式的xml。

<root>
 <Main1>
   .
   .
   .
 <Main1/>
 <Main2>
   <Main2ChildNode Id="1">Very Very Huge Base 64 String<Main2ChildNode>
   <Main2ChildNode Id="2">Very Very Huge Base 64 String<Main2ChildNode>
    .
    .
    .
   <Main2ChildNode Id="n">Very Very Huge Base 64 String<Main2ChildNode>
 <Main2/>
</root>

我没有将 xml 加载到内存中,而是尝试基于 Id 属性访问每个 Main2ChildNode 的内部文本。我需要在 Main2 部分下收集整个数据,并以这种方式逐一处理。我正在尝试的以下代码正在逐行迭代整个xml。

有没有更好的方法来识别一个特定的Main2ChildNode的内部文本,具有良好的性能。

 private String GetImageData(String Main2ChildNodeId,String XmlFilePath)
    {
         string data=null;
         using (XmlReader reader = XmlReader.Create(XmlFilePath))
         {
             reader.MoveToContent();
             while (reader.Read() && data == null)
             {
                 switch (reader.NodeType)
                 {
                     case XmlNodeType.Element:
                         if (reader.Name == "Main2ChildNode")
                         {
                             XElement el = XElement.ReadFrom(reader) as XElement;
                             if ((String)el.Attribute("Id") == Main2ChildNodeId)
                             {
                                 data= el.Value;
                             }
                         }
                         break;
                 }
             }
         }
         return data
    }

请提出更好的解决方案。

从巨大的xml文件中获取数据,而无需加载到内存中.c#.

尝试使用 SAX 是基于事件的,即事件在解析时触发,而不是一次读取整个文档。它有助于在分区中加载 XML。