我为Saxon的S9API XdmNode实例提供了一个本地缓存,通过URI实现了get、put、move和remove操作。move操作允许将XdmNode从一个URI移动到另一个URI。
我的问题是,XdmNode在内部保留文档的基本URI。如何更新底层NodeInfo的基本URI?当底层节点是DOMNodeWrapper时,可以更新基URI。但是,例如,TinyDocumentImpl是不变的。
是否有一种解决方案,允许更新TinyDocumentImpl的基本URI,而不需要通过创建树的完整副本来构建新文档?
发布于 2020-04-23 14:24:21
当这个问题第一次出现的时候,我错过了,因为没有一个“撒克逊”标签。
一种选择是使用LinkedTree作为您选择的树模型;链接树是可变的,DocumentImpl类有一个setBaseURI()方法。您可以使用DocumentBuilder.setTreeModel()选择树模型。(但是要小心使用;如果在转换过程中更改节点的属性,后果是不可预测的。)
另一个选项是将一个TreeInfo封装在一个net.sf.saxon.tree.wrapper.RebasedDocument中,它创建了原始节点的虚拟副本,除了具有不同的基URI之外,其他都是相同的。虚拟副本的内存开销几乎为零,但在导航树时开销很小。
https://stackoverflow.com/questions/61183348
复制相似问题