我的应用程序由多个 xml 源组成一个网页模型。使用普通的 Xerces 解析器将这些源作为 DOM 对象解析到内存中。不幸的是,Xerces DOM 对象对于只读操作来说不是线程安全的。我希望能够重用解析的 DOM 进行读取。有谁知道我使用的另一个解析器或一个简单的线程安全的读取 DOM 实现?
问问题
2726 次
2 回答
4
Saxon provides DOM wrappers to its internal and immutable data structure.
// 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;
(tested with saxon-he 9.5.1)
于 2014-10-17T12:12:24.047 回答
0
我不知道任何完美而简单的解决方案。
一个想法可能是重新创建 Dom使用线程安全对象
在这种情况下,它们最好是immutable,因为您是只读的。不可变也为进一步改进提供了可能性(例如,实例共享将导致更小的内存占用)。
我希望我可以建议一个这样做的库,因为它是相当多的编码......
于 2009-10-01T15:21:19.450 回答