如果我在XML中有一个值列表:
1 2 1 2 1 2 1 2 8 9 6 8 7 9 8
我正在使用preceding-sibling
或following-sibling
来搜索超过5
的值。我可以清楚地注意到following-sibling
只占preceding-sibling
的1/4时间,但理论上它们都会查询所有元素,那么为什么不同时查看它们呢? THX!
答案 0 :(得分:1)
嗯,这完全取决于您使用的XSLT / XPath处理器,以及它的树模型的实现细节。它可能还取决于您的XPath表达式究竟是什么样的,以及您如何衡量其性能。所以你需要给我们更详细的信息。 (在问SO的问题时,问问自己“我是否已经提供了足够的信息,其他人可以重现我的问题”?)
你正在使用的树实现完全有可能转发指针而没有向后指针,在这种情况下,找到前面的兄弟可能需要从头开始搜索。
Saxon的TinyTree实现在首次构建树时没有向后指针,但是第一次使用前一个兄弟轴时,为整个树创建向后指针会产生一次性成本,之后导航向前和向后的方向应该同样快。
毫无疑问,其他实现还有其他技巧可以让性能更快但更难以预测!