【问题标题】:How to change XdmNode base URI in S9API如何在 S9API 中更改 XdmNode 基本 URI
【发布时间】:2020-04-13 07:34:57
【问题描述】:

我有一个用于 Saxon 的 S9API XdmNode 实例的本地缓存,通过 URI 实现 getputmoveremove 操作。 move 操作允许将 XdmNode 从一个 URI 移动到另一个。

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

是否有一种解决方案允许更新TinyDocumentImpl 的基本 URI,涉及通过制作树的完整副本来构建新文档?

【问题讨论】:

    标签: saxon s9api


    【解决方案1】:

    由于缺少“撒克逊”标签,我在第一次出现时错过了这个问题。

    一种选择是使用LinkedTree 作为您选择的树模型;链接树是可变的,DocumentImpl 类有一个setBaseURI() 方法。您可以使用DocumentBuilder.setTreeModel() 选择树模型。 (但请谨慎使用;如果您在转换过程中更改节点的属性,后果是不可预测的。)

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

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 1970-01-01
      • 2018-09-03
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2011-01-10
      • 2016-12-31
      相关资源
      最近更新 更多