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