逻辑比较的使用是否比XPath中的轴更快?

时间:2013-06-25 21:20:12

标签: performance xpath comparison axes

我有一个XML文档,随着时间的推移,它会随着大小而变大,我希望确保我对XSL select的XPath选择尽可能高效。

该文档包含以下类型的元素:

<simple_instance>
  <name>Class0</name>
  <type>Business_Capability</type>
  <own_slot_value>
    <slot_reference>contained_business_capabilities</slot_reference>
    <value value_type="simple_instance">Class1</value>
    <value value_type="simple_instance">Class3</value>
    <value value_type="simple_instance">Class4</value>
    <value value_type="simple_instance">Class5</value>
  </own_slot_value>
  <own_slot_value>
    <slot_reference>business_capability_level</slot_reference>
    <value value_type="string">1</value>
  </own_slot_value>
  <own_slot_value>
    <slot_reference>name</slot_reference>
    <value value_type="string">Planning</value>
  </own_slot_value>
</simple_instance>

从长远来看,这两个选择器中的哪一个(找到类似上面的元素)会更有效?

/node()/simple_instance[type='Business_Capability']/own_slot_value/slot_reference[text()='business_capability_level']/following-sibling::value[text()='1']

/node()/simple_instance[type='Business_Capability' and (own_slot_value/slot_reference='business_capability_level') and (own_slot_value/value='1')]

我的猜测是,如果XML的实现短路and,后者会更快。

注意:我正在使用Protege的XML / XSL功能。

1 个答案:

答案 0 :(得分:0)

两个XPath表达式有不同的结果,因此询问哪个更快似乎无关紧要(第一个选择一个值元素,第二个选择一个simple_instance元素)。

此外,XPath是规范而非实现。实施在评估复杂路径的策略上差异很大。一个实现的答案可能不适用于另一个实现。测量并查看(并告诉我们答案)。