2011-06-21 140 views
6

前文我的html代碼:的XPath:選擇特定的標籤後和同一個標籤

<strong>Term:</strong> 
Some text<br /> 
More text<br /> 
Some more lines of text 
<strong>Term:</strong> 
Some text<br /> 
More text<br /> 
Some more lines of text 
<strong>Second term:</strong> 
Some text<br /> 
More text<br /> 
Some more lines of text 
<strong>Term:</strong> 
Some text<br /> 
More text<br /> 
Some more lines of text 

我需要獲取標記之間的文本節點文本「期限」和下一個標籤之前

Some text 
More text 
Some more lines of text 
Some text 
More text 
Some more lines of text 
Some text 
More text 
Some more lines of text 

這裏可以使用的條件:以前的標籤必須包含文本「術語」,但我不知道如何創建像這樣的xpath選擇器。

+1

嗨,我覺得這個問題不是很清楚。 你可以請發佈什麼是所需的輸出。可能那時我可以理解你到底想要什麼。 – Ravish

+0

我提出了更新問題。對不起,我的英語不好。 –

+0

您已更改輸入,請更新所需輸出。此外,添加有意義的文本來區分兒童。根據你的描述,你仍然很難理解你需要什麼。 –

回答

2

您的問題仍然不明確,您的輸入文檔格式不正確。檢查:

root/text()[preceding::strong[1][contains(text(),'Term')]] 

適用於:

<root> 
<strong>Term:</strong> 
Some text<br /> 
More text<br /> 
Some more lines of text 
<strong>Term:</strong> 
Some text2<br /> 
More text2<br /> 
Some more lines of text2 
<strong>Second term:</strong> 
Some text3<br /> 
More text3<br /> 
Some more lines of text3 
<strong>Term:</strong> 
Some text4<br /> 
More text4<br /> 
Some more lines of text4 
</root> 

生產:

Some text 
More text 
Some more lines of text 

Some text2 
More text2 
Some more lines of text2 

Some text4 
More text4 
Some more lines of text4 

此XPath,選擇包含該字符串​​和含有元素的元素之間的所有文本節點任何字符串:

//text()[preceding::*[contains(text(),'Term:')] and following::*[text()]] 

應用上:

<root> 
<strong>Term:</strong> 
Some text<br /> 
More text<br /> 
Some more lines of text 
<strong>Second term:</strong> 
Some text2<br /> 
More text2<br /> 
Some more lines of text2 
</root> 

返回:

Some text 
More text 
Some more lines of text 
4
//text()[preceding::*[contains(text(),'Term:')] and following::*[contains(text(),'Term:')]] 

這是一樣什麼EMPO已建議。不過,我正在尋找包含Term的節點並返回它們之間存在的所有文本節點。

但是,只有當您沒有任何其他的「術語」集合時才能正常工作。 讓我知道如果是這樣的話,因爲那麼這個Xpath也會返回一些不需要的值。

從現在開始,您已經更新了輸入。 我只是把一個更多的條件放到先前的Xpath中。

//text()[preceding::*[contains(text(),'Term:')] and following::*[contains(text(),'Term:')] and not(contains(., 'Term:'))] 

@empo解決方案也有效。但我們考慮到了<strong>。我寫的xpath簡單地檢查單詞'期限:'並給出它們之間的所有textNode。

讓我知道這是否適合你。

問候。

+0

您的解決方案非常出色,但只返回一個匹配項。如果我需要在文本爲「Term」的所有標籤之後獲取所有文本,該怎麼辦? –

+0

@Stephan你應該向我們展示更多你的輸入文檔。 –

+0

已更新示例。 –

相關問題