如何在S9API中改变XdmNode基础URI?

问题描述 投票:0回答:1

我为Saxon的S9API提供了一个自制的缓存。XdmNode 实例,实现 get, put, moveremove 按URI操作。的 move 操作允许移动一个 XdmNode 从一个URI到另一个URI。

我的问题是 XdmNode 内部保留了文档的基础URI。如何更新底层的基础URI?NodeInfo? 当底层节点是一个 DOMNodeWrapper,基础URI可以更新。但例如 TinyDocumentImpl 是不可改变的。

是否有一种解决方案,可以更新 TinyDocumentImpl 涉及到通过制作树的完整副本来构建一个新的文档?

saxon s9api
1个回答
1
投票

当这个问题第一次出现时,我错过了这个问题,因为缺乏 "saxon "标签。

一个选择是使用 LinkedTree 作为您所选择的树型;链接树是可以变异的,而且您所选择的 DocumentImpl 类有 setBaseURI() 方法。您可以使用 DocumentBuilder.setTreeModel(). (但要小心使用,如果你在转换过程中改变了一个节点的属性,后果是不可预知的。)

另一个选择是将一个 TreeInfo 在...中 net.sf.saxon.tree.wrapper.RebasedDocument,它创建了一个原始节点的虚拟副本,除了有一个不同的基本URI之外,其他都是一样的。虚拟副本的内存成本几乎为零,但在导航树时有一个小的开销。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.