Saxon s9api:何时期待TinyDocumentImpl与DocumentImpl

时间:2018-01-05 14:50:06

标签: java xslt saxon

所以我的公司在我们的产品中大量使用XSLT,我们即将从Java的javax.xml API迁移到Saxon的s9api。因此,我的任务是探索新的API,并弄清楚我们需要做出哪些改变。

令我烦恼的一件大事是Saxon NodeInfo。具体来说,对于整个XML文档,有两种实现:TinyDocumentImpl和DocumentImpl。他们没有共享一个通用的API,我还没有找到关于何时使用其中任何一个的好文档。

所以我的问题是:我什么时候应该期待一个与另一个?什么样的规则决定给定的Saxon操作返回哪一个?

一个额外的观点:到目前为止,在我的实验中,每当我使用Saxon DocumentBuilder加载文档时,我都会看到TinyDocumentImpl,但我已经看到DocumentImpl是MessageListener2实现的XdmNode参数的NodeInfo,它接收输出一个xsl:消息。所以是的,我在这里有点失落。感谢帮助。

1 个答案:

答案 0 :(得分:1)

Saxon的NodeInfo接口应包含操作节点通常所需的所有方法。事实上,对于大多数s9api应用程序,您不需要降低到更高级别XdmNode接口之下。 NodeInfo接口有许多不同的具体实现,包括你提到的DocumentImplTinyDocumentImpl,但除非你有很强的理由,否则你不应该关注具体的实现,因为它可能是根据配置设置甚至您正在使用的Saxon版本进行更改。

您还没有说明您对这些节点实际想做什么,但我认为可以使用NodeInfoXdmNode上提供的方法来实现。

一些额外的信息:TinyDocumentImpl表示“小树”中的文档节点,它是Saxon的默认树模型。 DocumentImpl是“链接树”中的文档节点,用于它带来好处的情况。 xsl:message指令生成(根据规范)XML文档,但在绝大多数情况下,XML文档仅包含文档节点和单个文本节点。在这种情况下,构建LinkedTree比构建TinyTree更好,因此我们选择该选项。但正如我之前所说,你真的不想知道......