2016-05-30 50 views
1

節點例如XML不起作用:XPATH之前時不存在

<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前述:

​​

工作的罰款。其結果是:

text 1 
text 2 
text 3 

但是,當一個XML不具有<div class="sifExp">節點,上述表達式不起作用。

  1. 爲什麼?
  2. 當節點<div class="sifExp">不存在時,是否有辦法獲取所有內容(text 1, text 2, text 3, text 4)?
+0

你忘記了什麼嗎?你提到「下面的表達」,但你沒有給出下面的表達。或者你在談論'follow ::'軸?我看不到使用這個軸。 –

+0

我的錯誤。我想寫「上面的表達式」('// ul [@ id ='list'] // div [@ class ='sifExp']/preceding :: li // h3 [@ class ='title']/a') – mpietrewicz

回答

3

讓我們找到li,其中還沒有div[@class='sifExp']。如果它不存在,所有li s都合適

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

太好了。這解決了這個問題。謝謝! – mpietrewicz

+0

很高興幫助!祝你好運! – splash58

+0

@mpietrewicz,請[**接受**](http://meta.stackoverflow.com/q/5234/234215)這個答案,如果它有幫助。謝謝。 – kjhughes

相關問題