私のアプリケーションは、多数の xml ソースから Web ページ モデルを構成しています。これらのソースは、通常の Xerces パーサーを使用して DOM オブジェクトとしてメモリに解析されています。残念ながら、Xerces DOM オブジェクトは読み取り専用操作に対してスレッド セーフではありません。解析された DOM を読み取り用に再利用できるようにしたいと考えています。私が使用している別のパーサーまたは読み取り DOM 実装に対して単純なスレッドセーフを知っている人はいますか?
2726 次
2 に答える
4
Saxon は、内部の不変データ構造に DOM ラッパーを提供します。
// create Saxon IdentityTransformer
final Transformer transformer = new TransformerFactoryImpl().newTransformer();
// set up holder for the output
final TinyBuilder outputTarget = new TinyBuilder(
new PipelineConfiguration(new Configuration()));
// transform into Saxon's immutable TinyTree
transformer.transform(xml, outputTarget);
// extract the whole XML as TinyNode
final TinyNodeImpl tinyNode = outputTarget.getTree().getNode(0);
// wrap TinyNode as DOM
final NodeOverNodeInfo nodeOverNodeInfo = DocumentOverNodeInfo.wrap(tinyNode);
// cast to DOM
final Document doc = (Document) nodeOverNodeInfo;
(saxon-he 9.5.1 でテスト済み)
于 2014-10-17T12:12:24.047 に答える
0
完璧で簡単な解決策はわかりません。
アイデアは、スレッドセーフなオブジェクトを使用して Dom を再作成することです。
この場合、読み取り専用であるため、 immutableであることが望ましいです。不変であることは、さらなる改善の可能性も開きます (たとえば、インスタンスの共有により、メモリ フットプリントが小さくなります)。
かなりの量のコーディングなので、これを行うライブラリを提案できたらいいのにと思います...
于 2009-10-01T15:21:19.450 に答える