編集:私の(不完全で非常にラフな)XmlLiteヘッダーの翻訳はGitHubで利用できます
DOMを使用せずにDelphiの大規模なXMLドキュメントとMSXMLを単純に組み合わせる最良の方法は何ですか?COMコンポーネントのSAXReaderとXMLWriterを使用する必要がありますか?良い例はありますか?
変換は、ルート(コンテナー)から多くの大きなファイル(60MB以上)から1つの大きなファイル(約1GB)までのすべてのContents要素の単純な組み合わせです。
<Container>
<Contents />
<Contents />
<Contents />
</Container>
XmlWriterとXmlReadersを使用して次のC#コードで動作させていますが、ネイティブの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
}
システムの他の部分ではすでにMSXMLDOMを使用しており、可能であれば新しいコンポーネントを追加したくありません。