【发布时间】:2020-08-27 14:40:19
【问题描述】:
我有巨大的 XML 文件,每个大约 1GB。它们太大了,由于数据量大,即使在 Notepad++ 中也无法打开。
我编辑了 XML 并能够通过 DOMDocument60 对其进行解析(感谢 stackflow 提供的帮助)。
我在Improve speed of VBA 阅读了类似的问题,但我仍然无法正确实施,因此需要一些指导。
例如:
- 如何在 SAX 中加载 xml?在 SAX 中读取之前,我是否需要将其加载到 DOMDocument60 中?
- 导入后如何在 SAX 中逐行读取?在 DOMDocument60 中,我可以轻松跳转到任何节点,然后循环遍历子节点,但不确定如何在 SAX 中执行此操作?
- 与 DOMDocument 相比,SAX 解析大型 XML 的时间差是多少?我还没有找到任何关于此的实时示例。
- 在 VBA 中是否有比 SAX 更好的选择,就像我可以用来加快解析过程的任何其他库一样。
感谢您的建议。 (示例 XML 文件如下)
<ParentNode type="actual">
<SampleObject class="POC" version="XYZ123" distName="Test1" id="Sample">
<p name="name">POC1</p>
<p name="object1">0</p>
<p name="object2">6</p>
<p name="object3">0</p>
</SampleObject>
<SampleObject class="POC" version="XYZ123" distName="Test2" id="Sample">
<p name="name">POC1</p>
<p name="object1">2</p>
<p name="object2">10</p>
<p name="object4">4</p>
<p name="object3">6</p>
</SampleObject>
<SampleObject class="POC" version="XYZ123" distName="Test3" id="Sample">
<p name="name">POC1</p>
<p name="object2">90</p>
<p name="object3">0</p>
</SampleObject>
<SampleObject class="POC" version="XYZ123" distName="Test4" id="Sample">
<p name="name">POC1</p>
<p name="object1">2</p>
<p name="object2">10</p>
<p name="object4">40</p>
<p name="object3">61</p>
</SampleObject>
【问题讨论】:
-
SAX 的重点是您不会一次性加载整个文档 - 您可以“随时”解析它。它比典型的基于 DOM 的解析稍微复杂一些,但有一些示例(VB6 示例应该可以转换为 VBA)
-
developerfusion.com/article/84405/sax-and-vb-6 - 这适用于 VB6,但似乎适用于 VBA。我以前没有使用过 SAX,但我使用您的示例 XML 在 5 分钟内启动并运行
-
非常感谢蒂姆。我在网上查看了一些示例,在 [link](docs.microsoft.com/en-us/previous-versions/windows/desktop/…) 中提到了使用 SAX 的 Microsoft 示例之一。这个例子让我很困惑,我可能可以将 DOM 加载方法与 sax 一起使用。我会看看你提到的例子,看看我能不能让它工作。
-
SAX 是否真正具有优势取决于您需要对 XML 内容做什么:如果您只是需要将内容提取为其他格式或只读部分内容,那么 SAX 可能会起作用。
-
目的是解析整个1GB大小、1000条记录的XML文件。 DOM 进程可以工作,但速度很慢,需要数小时才能解析它。我认为如果我逐行阅读 SAX 会起作用,只是第一次尝试使用它。
标签: xml vba ms-access xml-parsing