如果匹配数据位于后面,为什么跟随兄弟比兄弟姐妹更快

时间:2017-12-07 03:31:28

标签: xml xslt xpath

如果我在XML中有一个值列表:

1 2 1 2 1 2 1 2 8 9 6 8 7 9 8 

我正在使用preceding-siblingfollowing-sibling来搜索超过5的值。我可以清楚地注意到following-sibling只占preceding-sibling的1/4时间,但理论上它们都会查询所有元素,那么为什么不同时查看它们呢? THX!

1 个答案:

答案 0 :(得分:1)

嗯,这完全取决于您使用的XSLT / XPath处理器,以及它的树模型的实现细节。它可能还取决于您的XPath表达式究竟是什么样的,以及您如何衡量其性能。所以你需要给我们更详细的信息。 (在问SO的问题时,问问自己“我是否已经提供了足够的信息,其他人可以重现我的问题”?)

你正在使用的树实现完全有可能转发指针而没有向后指针,在这种情况下,找到前面的兄弟可能需要从头开始搜索。

Saxon的TinyTree实现在首次构建树时没有向后指针,但是第一次使用前一个兄弟轴时,为整个树创建向后指针会产生一次性成本,之后导航向前和向后的方向应该同样快。

毫无疑问,其他实现还有其他技巧可以让性能更快但更难以预测!