当节点不存在时,前面的xPath不起作用

时间:2016-05-30 17:24:42

标签: xml xpath

例如xml:

<ul id="list">
<li>
    <h3 class="title">
    <a>text 1</a>
    </h3>
</li>
<li>
    <h3 class="title">
    <a>text 2</a>
    </h3>
</li>
<li>
    <h3 class="title">
    <a>text 3</a>
    </h3>
</li>
<li>
    <div class="sifExp">
        <span>...</span>
    </div>
</li>
<li>
    <h3 class="title">
    <a>text 4</a>
    </h3>
</li>
</ul>

前面的xPath:

//ul[@id='list']//div[@class='sifExp']/preceding::li//h3[@class='title']/a

工作正常。结果是:

text 1
text 2
text 3

但是当xml没有<div class="sifExp">节点时,上面的表达式不起作用。

  1. 为什么?
  2. 当节点text 1, text 2, text 3, text 4不存在时,是否可以获取所有内容(<div class="sifExp">)?

1 个答案:

答案 0 :(得分:3)

让我们找到li之前没有的div[@class='sifExp']。如果它不存在,则所有li都适合

//ul[@id='list'] 
/li[not(preceding-sibling::li[div[@class='sifExp']])] 
/h3[@class='title']/a