2011-03-14 109 views
2

我有這個div:PHP簡單的XPath問題

<div class="product-name">Product1</div> 

我也有這個div:

<div class="product-name gold">Product2</div> 

我怎樣才能改變這種XPath查詢以獲得其包含產品名稱什麼的div ?而不是獲得完全匹配。

/html/body//div[@class='product-name'] 

我GOOGLE了它,但所有我能找到的是如何爲一個節點內的值,而不是一個屬性搜索時使用contains

編輯 enter image description here

+0

請提供您的源文件。 –

+0

@Alex,您爲什麼需要查看我提供的資源以外的任何資源? –

+0

有效的XML應該只有一個根節點。用' ..'包好你的div,一切都會好的。 –

回答

1

您可以使用contains()

/html/body//div[contains(@class, 'product-name')] 

更新:

由於@Alejandro指出了他的意見,這也將匹配任何類,它包含product-nameSee his answer for a XPath 1.0 solution

如果您使用XPath 2.0,你也可以這樣做:

/html/body//div[exists(index-of(tokenize(@class, "\s+"), "product-name"))] 
+0

不拿起第二個div,也在這裏檢查http://emdin-here.ru/r/xpath_checker/ –

+0

@ or:這個解決方案是正確的(根據你的問題)。如果它不適合你,你的問題並不代表你的問題。 – Tomalak

+0

@ orr:它​​適合我。你通過正確的文件?如果您使用上述精確的XPath,則文檔必須包含'html'和'body'節點。或者從路徑中移除'/ html/body'並重試。 –

0

/html/body//div[contains(@class,'product-name')]

屬性也是節點,它們被稱爲屬性節點。

+0

由於某些原因,仍然無法獲取產品名稱黃金 –

+0

,請驗證您的代碼是否正確。 '// div'部分是正確的並且符合您的要求。驗證不匹配的div是'/ html/body'的後代。您可以驗證此XPath f.i.在http://www.xmlme.com/XpathTool.aspx –

2

經典的XPath 1.0的答案對序列中的這個existencial測試:

/html/body//div[ 
    contains(
     concat(' ',normalize-space(@class),' '), 
     ' product-name ' 
    ) 
] 
+0

+1是更強大的解決方案。 –

+0

+1通用方法。 – Flack