2011-08-11 51 views
3

我想根據TARGET的內容在文檔中選擇以下HTML。即如果TARGET匹配,請選擇所有內容。但是,我不知道哪裏去後:id('page')/x:div/span/a='TARGET' - 如何利用父母,子女,兄弟姐妹和表情來獲取包含div,該a前面的那個div,並且兩個br標籤下面的divXPath表達式選擇自我,前後節點

<a></a> 
<div> 
    <br /> 
    <span><a>TARGET</a><a></a> 
     <span><span> 
      <a></a></span> 
      <a></a> 
      <span></span></span> 
      <span><a></a></span></span> 
</div><br /><br /> 

回答

3

使用單一的XPath,如:

"//*[ 
    (self::a and following-sibling::*[1][self::div and span/a='TRAGET']) or 
    (self::div and span/a='TARGET') or 
    (self::br and preceding-sibling::*[1][self::div and span/a='TARGET']) or 
    (self::br and preceding-sibling::*[2][self::div and span/a='TARGET']) 
    ]" 

請注意,您的文檔沒有很好地形成因未閉合BR標籤。而且,我沒有包含任何命名空間,如果需要可以添加。

+0

嗯。由於某種原因,這給了我一個無效的表達式錯誤。 – urschrei

+1

對不起,錯誤的代碼丟失了。現在修復。 –

+1

完美工作,不知道爲什麼我自己沒有找到丟失的支架。謝謝! – urschrei

1

也許,你應該首先找到所有div(不知道要具備的條件):

//div[span[a[text()="TARGET"]]][preceding-sibling::*[1][name()="a"]][following-sibling::*[1][name()="br"]] 

之後 - 每個DIV所有相關的元素:

./preceding-sibling::a[1] 
    ./following-sibling::br[1] 
    ./following-sibling::br[2]