2016-07-08 42 views
0

首先我需要一個元素a具有一定的後裔dxpath:是否可以選擇具有某個後代的祖先節點?

//a/b/c/d[@class='gotcha'] 

然後,我想從a執行一些進一步的搜索,比如說採取另一種的後代:

//a/b/c/d[@class='gotcha']/../../../b2/c2/d2 

是否有打算N中的任捷徑水平上升?理想情況下,我想以某種方式選擇「一個,有一些後代」進一步使用。

UPD:示例XML

<a> 
<b> 
    <c><d class='gotcha'></d></c> 
</b> 
<b2> 
    <c2><d2></d2></c2> 
</b2> 
</a> 

我需要d2時,知道結構和 '疑難雜症' 值可以改變。

+1

顯示示例XML或HTML,並標記您想要選擇的內容。然後,我們將能夠提出一個簡潔的XPath。從你的(可疑的)XPath猜測是非常不理想的。謝謝。 – kjhughes

+0

html:http://www.foxsports.com.au/afl我想要摘錄的內容:來自「women's afl」新聞欄目的鏈接。我正在使用的工作xpath:// section [@ class ='break-news']/header/h1 [re:test(text(),'women')] /../../ div/ol/li/article/header/div/h1 [@ itemprop ='name headline']/a/@ href。不知道你是否想要這個,而不是簡單的例子。 – VladimirLenin

+1

請在問題本身的內容中創建一個[mcve],以便將來如果鏈接發生變化,它將繼續對未來的讀者有價值。謝謝。 – kjhughes

回答

0

我想你問的是

//a[b/c/d[@class='gotcha']]/b2/c2/d2 

即:

  • 查找具有b的孩子,有一個孩子c元素a隨時隨地
    • 那有d子屬性class='gotcha'
  • 現在,從目前爲止選擇的a個元素中,找到b2子元素c2子元素d2子元素。

注:

  • XPath中的單詞「子」指的是直接的孩子,而不是孫子或其他任何後代。上面的原始問題使用「孩子」來表示「後代」,這是誤導和混亂。
  • XPath表達式將選擇全部適用的節點。所以上述解釋中的所有單數名詞都可以是複數。
  • 您也可以使用//a[b/c/d/@class='gotcha']/b2/c2/d2,這將等同於上述內容,但我認爲使用內部謂詞可以更好地解釋思維過程。
相關問題