Как объединить большие файлы XML с помощью MSXML SAX в Delphi

Изменить: Мой (неполный и очень приблизительный) перевод заголовка XmlLite доступен на GitHub

Как лучше всего объединить массивные XML-документы в Delphi с MSXML без используя DOM? Следует ли мне использовать COM-компоненты SAXReader и XMLWriter и есть ли какие-нибудь хорошие примеры?

Преобразование представляет собой простую комбинацию всех элементов содержимого из корня (контейнера) из множества больших файлов (60 МБ +) в один огромный файл (~ 1 ГБ


    
    
    

У меня он работает в следующем коде 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 в других частях системы, и я не хочу по возможности добавить новые компоненты.

8
задан carlmon 31 October 2013 в 10:43
поделиться