2011-01-27 80 views
6

Exmple飼料:查看源代碼:http://rss.packetstormsecurity.org/files/tags/exploit/匹配文本與XPath語法

我只是想回到那裏父稱號節點中有匹配的文本XML的部分,在這個例子中的文本匹配的「地盤」 。

//get feed with curl 

$doc = new SimpleXmlElement($xml, LIBXML_NOCDATA); 

//$result = $doc->xpath('//title'); //this works returns all the <title>'s 

$result = $doc->xpath('//title[site]');      //doesn't work 
$result = $doc->xpath('//title[text()="site"]');   //doesn't work 
$result = $doc->xpath('//title[contains(site)]');   //doesn't work 
$result = $doc->xpath('//title[contains(text(),'Site')]'); //doesn't work 


foreach ($result as $title) 
echo "$title<br />" 

回答

19

你需要的呼叫,我想,這樣的:

$result = $xpath->query('//title[contains(.,"Site")]'); 

注意,這是區分大小寫的。

請注意,contains XPath函數需要兩個參數:乾草堆和針。在這種情況下,我們使用當前節點的文本值作爲haystack,這通過使用點(.)表示。

+0

+1正確答案。你寫*「我們正在使用當前節點」*。但是`fn:contains()`函數需要兩個字符串數據類型參數,所以`self :: node()`縮寫語法(`.`)將被轉換爲`fn:string()`函數,返回它的**字符串值**:所有後代文本節點的連接。 – 2011-01-28 13:40:57