2009-10-01 29 views
5

我的應用程序從許多xml源組成一個網頁模型。這些源以正常的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)

相關問題