2013-10-02 29 views
3

我必須配置我們的企業搜索引擎,並通過xpath選擇器完成文檔的索引。 在當前設置有一個XPathxpath:跳過具有給定ID的子節點

.//div[@id='content'] 

這基本上選擇一網站的主要部分的所有元素。同時還有一個額外的div,其中包含很多廢話,所以我試圖修改這個xpath來跳過這個div標籤。我目前正在努力處理關於「不」的文檔,但是迄今爲止還沒有任何運氣。

<div id="content"> 
    <div id="i-want-this"> 
    ... 
    </div> 
    <div id="i-do-not-want-this"> 
    <span>foo</span> 
    </div> 
    <div id="i-want-this-too"> 
    ... 
    </div> 
</div> 

雖然我看到的是,在評論中的提示幫助我到目前爲止,我仍然有在div標籤我想跳過子元素的問題。比方說,裏面有一個span標籤。如果我選擇

// div [@ id ='content']/* [not(@ id ='i-do-not-this-this')] 我的結果仍然包含此span-content。所以我猜,我需要查詢id =「content」下面所有沒有父級id =「i-do-not-want-this」的元素。對?

+0

你只想要奇數? – Raptor

+0

nope。我的用例是一個div標籤,它包含幾個在頁面本身非常有用的文本,但如果這些文本顯示在我們的企業搜索 – vreen

回答

7

使用以下查詢。它將選擇所有id不是i-do-not-want-this的子元素。

//div[@id='content']/*[@id != 'i-do-not-want-this'] 

或 - 相同的邏輯 - 利用ǹot()函數(感謝@paul_t)

//div[@id='content']/*[not(@id='i-do-not-want-this')] 

更新

當我說相同的邏輯然後這個ISN真的沒錯。請訪問@IanRoberts的評論

+0

或'// div [@ id ='content']/* [not(@ id ='i-do-not-want-this')]' –

+0

@pault。是的,我想要記住''ot()'更便於攜帶。但我現在還不確定..已經爲我的答案添加了替代方案。謝謝! – hek2mgl

+2

在這種情況下'x!= y'和'not(x = y)'都會做同樣的事情,但是如果'x'或'y'(或兩者)都是包含多於一個節點。在這種情況下,如果有一對來自'x'的節點和一個來自'y'的節點不匹配(可能有其他對匹配),則'x!= y'爲真,而'not(x = y)'只有當_no_對匹配時纔是真實的。 –

相關問題