2011-12-19 90 views
3

我使用XPath從HTML中提取表格。我有一個獨特的情況,我只知道一半的元素屬性值,並且正在嘗試寫一個xpath表達式來查找我知道的一半,並忽略其餘部分。例如XPath語法 - 未知元素值

HtmlNodeCollection cols = doc.DocumentNode.SelectNodes("//td[@class='Iknowthis_DontKnowThis']"); 

尋找W3學校後,我看到有外卡運營商選擇未知節點,但我無法找到任何東西,說如何在這樣的情況下使用它們。

我用盡這樣的事情,但不能得到任何工作:

doc.DocumentNode.SelectNodes("//td[@class='Iknowthis_.*']"); 

也許它不可能?我不確定?

+0

什麼'xpath'庫是你使用什麼編程語言? – MattH 2011-12-19 16:33:41

+0

對不起,我使用C#與HtmlAgilityPack – Ron 2011-12-19 16:36:59

+0

歡迎使用stackoverflow!如果您使用更多信息(例如回覆評論)編輯和更新您的問題而不是澄清說明,它會使您的問題更容易理解併爲當前和未來的讀者編制索引。 (可能值得閱讀[站點常見問題解答](http://stackoverflow.com/faq#howtoask)) – MattH 2011-12-19 16:55:14

回答

1

我已經在w3schools xpath docs幾次了,我不認爲你可以使用通配符進行子字符串匹配(當在謂詞中測試相等性時)。

您可以使用一些 string functions string functions。例如: -

"//td[starts-with(@class,'Iknowthis_')]" 

您可能需要前綴starts-with功能與命名空間(例如fn:starts-with),這取決於執行。

還有一個matches字符串函數需要模式。

+0

感謝馬特,這些信息讓我看到另一個包含解決方案的線程: // * [contains( concat('',@class,''),'Iknowthis_')] – Ron 2011-12-19 16:55:35

+1

儘管我並不是真正進入w3schools仇敵陣營,但即使引用它們也可能會失敗(請參閱http://w3fools.com/) 。所以這裏是等效的w3c文檔:http://www.w3.org/TR/xpath/#section-String-Functions。而且,你永遠不需要在啓動時加前綴 - 帶有命名空間的函數 - 它是一個基本的XPath 1.0字符串函數。 – Tao 2011-12-19 16:56:41

+1

@陶:真的嗎?天哪,我從來沒有遇到過這種現象。從這一觀點來看,w3schools在搜索Google'xpath'時前兩個命中......並且[w3.org](http://www.w3.org/TR/xpath/#section-字符串函數)文檔不是特別可讀。 – MattH 2011-12-19 17:06:11

0

可能是你可以使用函數 '包含()':

//td[contains(@class, 'Iknowthis')] 

也可以使用函數 '不()' 排除水木清華:

//td[not(contains(@class, 'Iknowthis'))]