0

私は Java 6 を使用しており、かなり大きいいくつかの xml ドキュメントを処理しています...それらを解析し、いくつかの値を変更してから、ディスクにシリアル化する必要があります。

org.w3c.DOM を使用して xml ドキュメントをデシリアライズし、いくつかの属性値を変更しました。また、JAXP Transformer を使用して、変更された dom ドキュメントをシリアライズしました。しかし、私はそれが本当に遅いことに気づきました...

それで、dom ドキュメントをシリアル化する、または大きな xml ドキュメントを処理する、より効率的な方法があるのではないかと思っています。

更新:

タイマーを使用して、各部分にかかる時間を記録しました。以下はシリアル化です。

// serialize the updated DOM
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();

long t0 = timer.currentTimeMillis();
DOMSource source = new DOMSource(dom);
StreamResult result = new StreamResult(doc);
transformer.transform(source, result);
long t1 = timer.currentTimeMillis();

Reporter.log("Finished serializing " + doc.getAbsolutePath() + " in " + (((t1 - t0)) / 1000.0f) + " s.", true);

ログには次のように表示されます。

....
Finished serializing C:\Usrs\Adminstrator\Documents\Docs\InitialDocument_1.xml in 53 s.
4

4 に答える 4

3

StAX の使用を検討する必要があります。ここではDOMは適していません。ここで比較を見ることができます。

http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html

サンプルコードは以下の URL を参照してください。

http://docs.oracle.com/javaee/5/tutorial/doc/bnbfl.html

于 2013-05-06T19:17:10.567 に答える
2

SAX インターフェイスを使ってみましたか?

非常に大きな xml ドキュメントを非常に高速に処理する必要がある場合は、DOM 構造を避ける必要があります。次のような非 dom パーサーを見てください。

http://vtd-xml.sourceforge.net/

于 2013-05-06T19:17:48.253 に答える
1

最速の方法は StAX です。最も簡単な方法は JAXB です。

于 2013-05-06T19:17:32.393 に答える
0

90Kb をシリアライズするのに 50 秒かかるのはおかしいです。DOM は遅いですが、それほど遅くはありません。何かがうまくいかず、何が起こっているのかわかりません。

ただし、90Kb を「大きい」と説明するのは深刻な誤解を招くものであり、その誤解がいくつかの回答に影響を与えた可能性があります。

どのくらい速くする必要がありますか?私の推測では、XSLT などの標準的な変換メカニズムは十分に高速です。

もう 1 つの関連する要素は、コンテンツに加える必要がある変更は正確には何ですか? 必要なロジックの複雑さに大きく依存します。

于 2013-05-06T22:27:28.223 に答える