Редактировать: Мой (неполный и очень грубый) перевод заголовка XmlLite доступен на GitHub
Как лучше всего объединить массивные XML-документы в Delphi с MSXML без использования DOM? Стоит ли использовать COM-компоненты SAXReader и XMLWriter и есть ли хорошие примеры?
Преобразование представляет собой простую комбинацию всех элементов содержимого из корня (контейнера) из множества больших файлов (60 МБ +) в один большой файл (~ 1 ГБ).
<Container>
<Contents />
<Contents />
<Contents />
</Container>
Он работает в следующем коде C # с использованием XmlWriter и XmlReaders, но это должно происходить в нативном процессе 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 в других частях системы, и я не хочу добавлять новые компоненты, если это возможно.