2013-12-20 17 views
1

我的HTML結構如下圖XPath 1.0中獲得前一個元素值不是靜態的位置

<h2>Title 1</h2> 
    <br> 
    <br> 
    <div class="active"></div> 
    <h2>Title 2</h2> 
    <br> 
    <br> 
    <div class="active"></div> 
    <div></div> 
    <div></div> 
    <div class="active"></div> 
    <h2>Title 3</h2> 
    <br> 
    <br> 
    <div></div> 
    <div></div> 
    <h2>Title 4</h2> 
    <br> 
    <br> 
    <div></div> 
    <div class="active"></div> 
    <div></div> 

我想根據已獲得的div拿到前一H2的價值活躍

我xpath的後代軸用於選擇節點作爲下面

//div[contains(@class, 'active')] 

我試圖祖先前面的XPath軸,但沒有得到正確的結果

這可能使用XPath 1.0

注:我只能使用的XPath 1.0版

預先感謝您

回答

2

此XPath表達式:

//div[@class='active']/preceding-sibling::h2[1] 

可以看作是

「在每個活動的<div>元素之前選擇第一個<h2>元素。」

應該爲你做的伎倆。

+2

2美分:在這種情況下,使用「前置兄弟」而不是「前置」將會更加正確。 –

0

我也爲@Slanec建議的解決方案投票 - 這很好,很簡單。

但是,如果你想確保你的元素的特定範圍內的搜索元素,你可以使用擴展的XPath:

//div[(preceding-sibling::h2 and following-sibling::h2) 
     or preceding-sibling::h2[not(following-sibling::h2)]] 
    [@class='active'] 
    /preceding-sibling::h2[1] 

這是一樣的,除了這裏「DIV」在2個'h2'元素之間的範圍內搜索(或者在'h2'之後,以防頁面中沒有更多'h2'元素)。

相關問題