Есть ли класс/библиотека PHP, который позволит мне запрашивать документ XHTML с помощью селекторов CSS? Мне нужно очистить некоторые страницы для данных, которые очень легко доступны, если я могу каким-то образом использовать селектор CSS (jQuery испортил мне!). Есть идеи?PHP CSS Selector Library?
ответ
После погуглить дополнительно (первоначальные результаты были не очень полезно), кажется, что есть на самом деле Zend Framework библиотеки для этого, наряду с некоторыми другими:
XPath является довольно стандартным способом доступа к XML (и XHTML) узлов, и обеспечивает гораздо более высокую точность, чем CSS.
Для анализа документов Я использую DOM. Это может довольно легко решить вашу проблему, если вы знаете имя тега (в данном примере «сОн»):
$doc = new DOMDocument();
$doc->loadHTML($html);
$elements = $doc->getElementsByTagName("div");
foreach ($elements as $e){
if ($e->getAttribute("class")!="someclass") continue;
//its a div.classname
}
Не уверен, если DOM позволяет получить все элементы документа сразу ... возможно, придется совершите обход дерева.
Для jQuery пользователей наиболее интересным может быть порт JQuery в PHP, который phpQuery. Портируются практически все разделы библиотеки. Кроме того, он содержит Плагин WebBrowser, который может использоваться для веб-поиска. Все пути/процессы сайта (например, доступ к данным, доступным после входа в систему). Он просто имитирует веб-браузер на сервере (события и файлы cookie тоже). Последние версии имеют экспериментальную поддержку XML пространства имен и CSS3 "|" селектор.
Я написал мое, основанное на механизме селектора CSS Mootools http://selectors.svn.exyks.org/. он полагается на SimpleXml способности расширения (так, это только для чтения)
Еще один:
http://querypath.org/
Большой один является компонентом Symfony 2, CssSelector\ParserIntroduction. Он преобразует селектора CSS в выражения XPath. Посмотрите =)
Я закончил с использованием PHP Query Lite, это очень просто и имеет все, что мне нужно.
+1 phpQuery абсолютно замечательный. – Sampson 2009-07-17 18:36:00
Я попробовал 3 из перечисленных вами предметов. В конце концов, мой выбор - это просто HTML DOM, потому что они объясняют его использование очень просто и хорошо. phpQuery выполнил эту работу, но мне показалось, что нехватка документации и поддержки. Zend успешно захватил мой запрос и подсчитал его, но когда дело дошло до получения значений, оно не удалось. Опять же, мое предложение - это простой HTML DOM. – NessDan 2010-12-10 02:50:47
Хотя простой html dom довольно популярен, а) он не имеет хорошего охвата синтаксиса полного синтаксиса. B) он не * появляется * в активной разработке. – 2011-12-07 11:42:41