2011-06-29 54 views
2

因此,目前我使用Xpath從blockquote標籤中檢索文本,但我需要能夠選擇特定塊引用。 我需要的兩種類型之間的唯一區別是它們直接跨越後。 比方說,我需要從對方獲取文本1和文本,這將是HTML:使用Xpath在特定範圍後選擇blockquote

<span id="1">some code here</span> 
<blockquote>text1</blockquote> 

more code in here 

<span id="2">some code here</span> 
<blockquote>text</blockquote> 

我怎麼會去這樣做呢?

+0

順便說一句,我使用 「// BLOCKQUOTE /節點()」,以目前得到的文本。 – spykr

+0

+1爲好問題。下次請確保添加所有必要的細節。 –

+0

我會留到-1。之後,我會刪除我的問題。 –

回答

1

我會用:

//span[starts-with(@id,'nothread')]/following::*[1][name()='blockquote'] 

這將讓所有的希望塊引用元素。

來獲取文本節點:

//span[starts-with(@id,'nothread')]/following::*[1][name()='blockquote']/text() 
+0

謝謝!這很好,比其他答案更可讀。我可以將它們都設置爲正確的答案嗎? – spykr

+0

不客氣。你可以不接受前一個並接受它。 –

+0

我做了,現在我感覺不好。 – spykr

3

假設我們有這樣的XML:

<root> 
<span id="1 nothread">some code here</span> 
<blockquote>text1</blockquote> 

more code in here 

<span id="2 nothread">some code here</span> 
<blockquote>text</blockquote> 

<span id="3">some code here</span> 
<blockquote>text</blockquote> 

<blockquote>not selected text</blockquote> 
</root> 

所以,這個XPath://blockquote[local-name(preceding::*[1]) = 'span' and contains(preceding::*[1]/@id, 'nothread')]/node()選擇所有如果跨度間隔後,直接/ @ id包含nothread。 結果:

  1. 的text1
  2. 文本

所以你看,not selected text沒有選擇

+0

謝謝,但我需要分別獲取text1和文本。通過跨度ID。我需要檢查span id是否包含「nothread」(忘記在我的文章中提到這部分,對不起),如果它包含,請從後面的blockquote中獲取文本。你明白我的意思嗎? – spykr

+0

@Darcy,我更新了我的回答 –

+0

@polishchuck:不幸的是,這不起作用,我不知道爲什麼。即使只是使用「// blockquote [local-name(preceding :: * [1])='span']/node()」也不會因爲某種原因而工作。 – spykr