多くのxmlファイルを1つにマージしようとしています。 DOMで成功しましたが、この解決策はいくつかのファイルに限られています。私が複数のファイル> 1000で実行すると、java.lang.OutOfMemoryErrorが得られます。私は、次のファイルを持っているところ> 1000 xmlファイルをJavaを使って1つにマージする方法
は何を達成したいことはある
ファイル1:
<root>
....
</root>
ファイル2:
<root>
......
</root>
ファイルN:
<root>
....
</root>
その結果: 出力:
<rootSet>
<root>
....
</root>
<root>
....
</root>
<root>
....
</root>
</rootSet>
これは私の現在の実装である:
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element rootSetElement = doc.createElement("rootSet");
Node rootSetNode = doc.appendChild(rootSetElement);
Element creationElement = doc.createElement("creationDate");
rootSetNode.appendChild(creationElement);
creationElement.setTextContent(dateString);
File dir = new File("/tmp/rootFiles");
String[] files = dir.list();
if (files == null) {
System.out.println("No roots to merge!");
} else {
Document rootDocument;
for (int i=0; i<files.length; i++) {
File filename = new File(dir+"/"+files[i]);
rootDocument = docBuilder.parse(filename);
Node tempDoc = doc.importNode((Node) Document.getElementsByTagName("root").item(0), true);
rootSetNode.appendChild(tempDoc);
}
}
私は、XSLT、サックスで多くのことを経験してきたが、私は何かが欠けておくように見えます。どんな助けも高く評価されます
DOMを実際にメモリに保持する必要がありますか?この場合、単純な文字列連結以上のものが必要ですか? –
単純な連結は、個々のxmlファイルがマージされている場合にxml宣言を保持します。ビット実際には、私はXMLファイルの単純な連結を探しています。 – Andra
複数のXMLファイルを1つのアーカイブに入れてみませんか?それは1つのファイルとして終わります。読み取り/書き込み速度が重要で、ファイルサイズや帯域幅が重要な場合は、圧縮して圧縮しないでください。 –