我为Saxon的S9API提供了一个自制的缓存。XdmNode
实例,实现 get
, put
, move
和 remove
按URI操作。的 move
操作允许移动一个 XdmNode
从一个URI到另一个URI。
我的问题是 XdmNode
内部保留了文档的基础URI。如何更新底层的基础URI?NodeInfo
? 当底层节点是一个 DOMNodeWrapper
,基础URI可以更新。但例如 TinyDocumentImpl
是不可改变的。
是否有一种解决方案,可以更新 TinyDocumentImpl
该 不 涉及到通过制作树的完整副本来构建一个新的文档?
当这个问题第一次出现时,我错过了这个问题,因为缺乏 "saxon "标签。
一个选择是使用 LinkedTree
作为您所选择的树型;链接树是可以变异的,而且您所选择的 DocumentImpl
类有 setBaseURI()
方法。您可以使用 DocumentBuilder.setTreeModel()
. (但要小心使用,如果你在转换过程中改变了一个节点的属性,后果是不可预知的。)
另一个选择是将一个 TreeInfo
在...中 net.sf.saxon.tree.wrapper.RebasedDocument
,它创建了一个原始节点的虚拟副本,除了有一个不同的基本URI之外,其他都是一样的。虚拟副本的内存成本几乎为零,但在导航树时有一个小的开销。