2009-10-01 14 views
5

私のアプリケーションは、いくつかのxmlソースからWebページモデルを作成します。これらのソースは、通常のXercesパーサでDOMオブジェクトとしてメモリに解析されています。残念ながら、Xerces DOMオブジェクトはではなく、は読み取り専用操作のスレッドセーフです。私は、解析されたDOMを読み込み用に再利用できるようにしたいと考えています。誰かが私が使用するDOM実装を読み込むための別のパーサまたは単純なスレッドを知っていますか?読み取り操作でスレッドセーフなDOMを作成する

答えて

0

私は完璧で簡単な解決策を知りません。

スレッドセーフオブジェクトを使用してDomを再作成することが考えられます。

この場合、読み取り専用であるため、は変更不可能になることが望ましいです。 不変であれば、さらに改善する可能性が開かれます(インスタンスの共有など、メモリフットプリントが小さくなります)。

私はそれがコーディングのかなりの量であると、私は、これを行うライブラリを提案することがしたい...

4

サクソンは、その内部と不変のデータ構造に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; 

(サクソン-彼9.5.1でテスト済み)

関連する問題