Сопоставить текст с синтаксисом XPATH - PullRequest
7 голосов
/ 28 января 2011

Exmple feed: view-source: http://rss.packetstormsecurity.org/files/tags/exploit/

Я хочу вернуть только те разделы 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 />"

1 Ответ

21 голосов
/ 28 января 2011

Вам нужен звонок, я думаю, это:

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

Обратите внимание, что это чувствительно к регистру.

Обратите внимание, что функция XPath contains принимает два аргумента: стог сена и иголка. В этом случае мы используем текстовое значение текущего узла в качестве стога сена, на что указывает использование точки (.).

...