所以我的公司在我们的产品中大量使用XSLT,我们即将从Java的javax.xml API迁移到Saxon的s9api。因此,我的任务是探索新的API,并弄清楚我们需要做出哪些改变。
令我烦恼的一件大事是Saxon NodeInfo。具体来说,对于整个XML文档,有两种实现:TinyDocumentImpl和DocumentImpl。他们没有共享一个通用的API,我还没有找到关于何时使用其中任何一个的好文档。
所以我的问题是:我什么时候应该期待一个与另一个?什么样的规则决定给定的Saxon操作返回哪一个?
一个额外的观点:到目前为止,在我的实验中,每当我使用Saxon DocumentBuilder加载文档时,我都会看到TinyDocumentImpl,但我已经看到DocumentImpl是MessageListener2实现的XdmNode参数的NodeInfo,它接收输出一个xsl:消息。所以是的,我在这里有点失落。感谢帮助。
答案 0 :(得分:1)
Saxon的NodeInfo
接口应包含操作节点通常所需的所有方法。事实上,对于大多数s9api应用程序,您不需要降低到更高级别XdmNode
接口之下。 NodeInfo接口有许多不同的具体实现,包括你提到的DocumentImpl
和TinyDocumentImpl
,但除非你有很强的理由,否则你不应该关注具体的实现,因为它可能是根据配置设置甚至您正在使用的Saxon版本进行更改。
您还没有说明您对这些节点实际想做什么,但我认为可以使用NodeInfo
或XdmNode
上提供的方法来实现。
一些额外的信息:TinyDocumentImpl表示“小树”中的文档节点,它是Saxon的默认树模型。 DocumentImpl是“链接树”中的文档节点,用于它带来好处的情况。 xsl:message指令生成(根据规范)XML文档,但在绝大多数情况下,XML文档仅包含文档节点和单个文本节点。在这种情况下,构建LinkedTree比构建TinyTree更好,因此我们选择该选项。但正如我之前所说,你真的不想知道......