java Saxon s9api:什么时候期待TinyDocumentImpl与DocumentImpl
我的公司在我们的产品中大量使用XSLT,我们即将从Java的javax迁移出去。xml API和Saxon的s9api。正因为如此,我一直在探索新的API,并找出我们需要做哪些更改
让我烦恼的一件大事是撒克逊人的NodeInfo。具体来说,对于整个XML文档,有两种实现:TinyDocumentImpl和DocumentImpl。它们不共享一个公共API,我还没有找到关于何时使用这两种API的好文档
所以我的问题是:我应该在什么时候看到一个和另一个?什么样的规则决定给定的Saxon操作返回哪一个
另外一点:到目前为止,在我的实验中,每当我使用Saxon DocumentBuilder加载文档时,我都会看到TinyDocumentImpl,但我看到DocumentImpl是MessageListener2实现的XdmNode参数的基础节点信息,它接收xsl:message的输出
# 1 楼答案
Saxon的
NodeInfo
接口应该包含操作节点通常需要的所有方法。事实上,对于大多数s9api应用程序,您不需要下拉到更高级别的XdmNode
接口下面。NodeInfo接口有许多不同的具体实现,包括您提到的DocumentImpl
和TinyDocumentImpl
,但是除非您有非常充分的理由,否则您不应该关心具体的实现,因为它可能会根据配置设置,甚至是您使用的Saxon版本而改变你还没有说你想用这些节点做什么,但我认为它可能可以通过
NodeInfo
或XdmNode
上可用的方法来实现还有一点额外的信息:TinyDocumentImpl代表“小树”中的一个文档节点,这是Saxon的默认树模型。DocumentImpl是“链接树”中的一个文档节点,用于提供好处的情况。xsl:message指令(根据规范)生成一个XML文档,但在绝大多数情况下,XML文档只包含一个文档节点和一个文本节点。在这种情况下,构建LinkedTree比构建TinyTree性能更好,所以我们选择了这个选项。但正如我之前所说,你真的不想知道