Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Вы можете применять его для парсинга любой html-страницы
$crazyHtml = 'd<dd';
$dom =new DomDocument();
$dom->loadHtml($crazyHtml);
echo $dom->saveHtml();PHP Warning: DOMDocument::loadHTML(): Couldn't find end of Start Tag dd in Entity, line: 1 in /tmp/a.php on line 3
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>d</p><dd></dd></body></html>
Также как SQL, xpath является декларативным языком программирования.Это не язык программирования, а язык запросов. Вы же CSS не считаете языком программирования?
// без лишней надобности. Это неэффективно: запрос пройдет *весь* DOM, в поисках удовлетворяющих условиям элементов. Потрудитесь указать полный путь до элемента (ну или хотя бы путь до области где могут быть эти элементы), это поможет вам сэкономить нервы и время на больших объемах данных.// неэффективна, и применять ее повсеместно вместо указания пути к элементу не рекомендуется.//div[@id='main-content']), сохранить в переменную языка программирования и потом уже искать запросами в этом контексте.context=document.xpath("//div[@id='main-content']")[0]
article_title=context.xpath("div[@class='hentry']/h2/span")
article_content=context.xpath("div[@class='hentry']/div[@class='content']")
comments=context.xpath("div[@id='comments']/ul")ExtractValue() и UpdateXML()SELECT * FROM taxonomy WHERE EXTRACTVALUE(`cluster`,'/sys-cluster/meta/title[self:text()]') = 'products';SELECT * FROM taxonomy WHERE EXTRACTVALUE(`cluster`,'/sys-cluster/meta/title') = 'products';mysql> SELECT benchmark(1000000, ExtractValue(@xml, '/a/b/c'));+--------------------------------------------------+
| benchmark(1000000, ExtractValue(@xml, '/a/b/c')) |
+--------------------------------------------------+
| 0 |
+--------------------------------------------------+
1 row IN SET (4.77 sec)
Примеры xpath-запросов к html