gpt4 book ai didi

delphi - 如何在 Delphi 中使用 MSXML SAX 组合大型 XML 文件

转载 作者:行者123 更新时间:2023-12-03 14:48:49 25 4
gpt4 key购买 nike

编辑:我的(不完整且非常粗糙的)XmlLite header 翻译可在 GitHub 上找到。

在 Delphi 中,在不使用 DOM 的情况下将大量 XML 文档与 MSXML 进行简单组合的最佳方法是什么?我应该使用 COM 组件 SAXReader 和 XMLWriter 吗?有什么好的例子吗?

该转换是从根(容器)开始的所有 Contents 元素的简单组合,从许多大文件 (60MB+) 到一个大文件 (~1GB)。

<Container>
<Contents />
<Contents />
<Contents />
</Container>

我使用 XmlWriter 和 XmlReaders 在以下 C# 代码中工作,但它需要在 native Delphi 进程中进行:

var files = new string[] { @"c:\bigFile1.xml", @"c:\bigFile2.xml", @"c:\bigFile3.xml", @"c:\bigFile4.xml", @"c:\bigFile5.xml", @"c:\bigFile6.xml" };

using (var writer = XmlWriter.Create(@"c:\HugeOutput.xml", new XmlWriterSettings{ Indent = true }))
{
writer.WriteStartElement("Container");

foreach (var inputFile in files)
using (var reader = XmlReader.Create(inputFile))
{
reader.MoveToContent();
while (reader.Read())
if (reader.IsStartElement("Contents"))
writer.WriteNode(reader, true);
}

writer.WriteEndElement(); //End the Container element
}

我们已经在系统的其他部分使用了 MSXML DOM,如果可能的话我不想添加新组件。

最佳答案

XmlLite是 System.Xml 的 xml 读取器和编写器的 native C++ 端口,它提供拉式解析编程模型。 W2K3 SP2、WinXP SP3 及以上版本均附带该产品。在从 C# 到 Delphi 的几乎 1-1 映射之前,您需要一个 Delphi header 转换。

关于delphi - 如何在 Delphi 中使用 MSXML SAX 组合大型 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6942984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com