检查从xml中的特定点开始的先前节点

时间:2014-06-04 22:10:42

标签: xpath xslt-1.0

我正在尝试创建一个xpath来查找一个元素,该元素在公共父元素下面没有任何'p','li'或'span'元素。例如,我有这样的结构:

  <a>
    <div>
      <div/>
      <div>
        <div>
          <div>
            </p>
          </div>
          <img/>
        </div>
        <div>
          <ci/>
        </div>
      </div>
    </div>
  </a>

我感兴趣的节点是<img>元素。到目前为止,我有这个xpath:

count(/a/div[1]/div[position() = last()]//img[(count(preceding::*[name() = 'p' or name() = 'li' or name() = 'span']) = 0)]) > 0

我不关心任何不需要的元素是否在/ a / div [1] / div [1] /只在/ a / div [1] / div [2]下。话虽如此,前面将无法工作,因为它将在/ a / div [1] / div [1]下看,我不在乎。上例中的'p'元素可以是任意数量的div。

编辑: 我添加了包含元素<ci/>的div。

1 个答案:

答案 0 :(得分:0)

我能够使用以下内容实现此目的:

count(/a/div[1]/div[position() = last()]//img[(count(preceding::*[(name() = 'p' or name() = 'li' or name() = 'span']) and ancestor::div[parent::div[parent::a] and descendant::ci]]) = 0)]) > 0