2009-10-01 28 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)

相关问题