我的公司在我们的产品中大量使用XSLT,我们即将从javax.xml迁移到javax.xml的s9api。正因为如此,我的任务是探索新的API,并弄清楚我们需要做出哪些改变。
困扰我的一个大问题是撒克逊NodeInfo。具体来说,对于整个XML文档,有两种实现: TinyDocumentImpl和DocumentImpl。它们不共享一个通用的API,我还没有找到关于何时使用它们的好的文档。
所以我的问题是:什么时候我应该期待一个而不是另一个?什么类型的规则决定了给定的Saxon操作返回哪个规则?
另外一点:到目前为止,在我的实验中,每当我使用Saxon加载文档时,我都会看到TinyDocumentImpl,但是我已经将DocumentImpl看作是MessageListener2实现的XdmNode参数的底层NodeInfo,它接收xsl:message的输出。
发布于 2018-01-06 17:22:50
Saxon的NodeInfo接口应该包含操作节点通常需要的所有方法。实际上,对于大多数s9api应用程序,您不应该处于较高级别的XdmNode界面之下。NodeInfo接口有许多不同的具体实现,包括您提到的DocumentImpl和TinyDocumentImpl,但是除非您有非常充分的理由,否则您不应该关心具体的实现,因为它可能会根据配置设置甚至您正在使用的Saxon版本而发生变化。
您还没有说明您实际上想要对这些节点做什么,但是我认为可以使用NodeInfo或XdmNode上提供的方法来实现。
还有一点额外的信息: TinyDocumentImpl表示“微型树”中的一个文档节点,这是Saxon的默认树模型。DocumentImpl是“链接树”中的文档节点,用于提供好处的情况。message指令(根据规范)生成一个XML文档,但在绝大多数情况下,XML文档只包含一个文档节点和一个文本节点。在这种情况下,构建LinkedTree比构建TinyTree性能更好,因此我们选择该选项。但就像我之前说的,你真的不想知道...
https://stackoverflow.com/questions/48115955
复制相似问题