2010-07-28 134 views
2

的一組條件降低的前同輩我喜歡下面的html代碼:XPath查詢。節點

<p style="margin:0 0 0.5em 0;"><b>Blablub</b></p>
<table> ... </table>

現在我想查詢右表上方,但只有在該<b>的內容表沒有任何屬性。我嘗試以下查詢:

//表[否(@ *)] /前同輩:: P/B

如果刪除了preceding-sibling::p/b部分完全它的工作原理。它給我完全我需要的表格。但是,如果我使用此查詢,它會給我一個<b>標籤的內容,該標籤位於表格的WITH屬性之前。

+0

好問題(+1)。查看我的答案以獲取正確的XPath表達式。 :) – 2010-07-28 12:52:17

回答

3

使用

//table[not(@*)]/preceding-sibling::*[1][self::p]/b 

這意味着:選擇所有b元素都p元素是一個table是沒有屬性的第一前置兄弟的孩子。

這是從問題引用的問題表達完全不同:

//table[not(@*)]/preceding-sibling::p[1]/b 

後者選擇第一p的兄弟之後的b孩子 - 沒有保證的第一個p以下兄弟姐妹也是第一個兄弟姐妹。

+0

非常感謝。這似乎工作,雖然我不明白爲什麼它沒有工作之前:)。我使用查詢'// table [not(@ *)]/preceding-sibling :: p [1]/b',它應該和你的一樣。 – 2010-07-30 10:43:24

+0

@ Christian-Ziegler:這兩個表達方式並不相同。你的兄弟姐妹選擇了第一個「p」的「b」子女。我選擇第一個元素兄弟的'b'子元素,如果它碰巧是'p'。 – 2010-07-30 12:42:39

+0

啊,這是有道理的。感謝您的澄清! – 2010-08-02 17:52:29