查找具有特定属性值的第一个节点

时间:2016-05-24 11:50:05

标签: xpath

<document>
  <para>
    <heading id="1" type="new" level="1" />
    <span />
    <heading id="2" type="new" level="2" />
    <span />
  </para>
  <para>
    <heading id="3" type="new" level="1" />
    <span />
    <heading id="4" type="new" level="2" />
    <span />
  </para>
  <para>
    <heading id="5" type="old" level="2" />
    <span />
  </para>
  <para>
    <heading id="6" type="old" level="2" />
    <span />
  </para>
  <para>
    <heading id="7" type="old" level="2" />
    <span />
  </para>
  <para>
    <heading id="8" type="old" level="2" />
    <span />
  </para>
  <para>
    <span />
  </para>
</document>

您好,

我在Javascript中逐个节点地解析上述XML。假设我目前处于&#34;标题id =&#39; 8&#39;&#34;如何节点,我将如何向后看并找到第一个将其级别设置为&#34; 2&#34; (与我当前正在解析的节点上的级别相同)并键入设置为&#34; new&#34;使用XPath表达式?

因此,在上面的例子中,id =&#34; 4&#34;必须选择。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用preceding轴并使用index仅返回最近的前一个元素:

preceding::*[@level='2' and @type='new'][1]

<强> xpathtester demo

输出

<heading id="4" level="2" type="new"/>

在演示中,我使用//*[@id='8']首先选择带id=8的元素,模拟上下文元素,然后使用上面提到的XPath继续选择目标元素。

答案 1 :(得分:0)

其实我以为你想要这个。

  

我如何向后看并找到第一个节点,其级别设置为与我正在解析的节点上的级别相同,并使用类型设置为new XPath表达式?

哦,好了,留待这里以备将来参考......

[@type='new' and @level=current()/@level]