XPath
Материал из Chesser Wiki
Ресурсы
- http://zvon.org/xxl/XPathTutorial/Output_rus/
- http://www.raleigh.ru/XML/w3schools/xpath/
- http://habrahabr.ru/post/107004/
- http://www.w3.org/TR/xpath20/
Примеры XPath
XPath-правило
пример xpath-правила: //div[descendant::*[contains(text(), 'substringaaaa')]] оно выберет ВСЕ div-ы, внутри которых есть слово substringaaaa:
Подробнее разберем каждый элемент адресации:
- // - это значит путь начинается с wildcard-символа, по аналогии с *filename, т.е. любой путь-префикс
- //div - ищем везде div'ы
- //div[*] - явно выбираем ВСЕ div'ы (хотя будет работать и без[*])
- //div[descendant::*] - выбираем ВСЕ div'ы вместе со всеми вложенными тегами(потомками)
- //div[descendant::*[contains(text(), 'substringaaaa')]] - тут сужаем поиск: ВСЕ div'ы, но внутри которых в тексте(в содержимом тегов, в том числе внутри тегов-потомках) содержится слово substringaaaa
Пример использования XPath на PHP
<?php
$text = file_get_contents('http://chesser.ru/blog/');
$doc = new DOMDocument();
$doc->loadHTML($text);
// для обработки html текста в формате UTF-8 можно использовать такой хак:
// $doc->loadHTML('<?xml encoding="UTF-8">' . $text);
$xpath = new DOMXpath($doc);
$nodes = $xpath->query("//div[descendant::*[contains(text(), 'substringaaaa')]]");
if($nodes->length > 0) {
foreach($nodes as $item)
var_dump($item->nodeValue);
}
else {
echo 'empty';
}
?>