【问题标题】:Is the use of logical comparisons quicker than axes in XPath?在 XPath 中使用逻辑比较是否比轴更快?
【发布时间】:2013-06-25 21:20:12
【问题描述】:

我有一个 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 功能。

【问题讨论】:

    标签: performance xpath comparison axes


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 2012-07-16
      相关资源
      最近更新 更多