phpQuery и QueryPath чрезвычайно похожи в репликации свободного API jQuery. Вот почему они - два из самых простых подходов к правильно анализируют HTML в PHP.
Примеры для QueryPath
В основном вы сначала создаете запрашиваемое дерево DOM из строки HTML:
$qp = qp("title
..."); // or give filename or URL
Результирующий объект содержит полное древовидное представление документа HTML. Он может быть пройден с использованием методов DOM. Но общий подход заключается в использовании селекторов CSS, например, в jQuery:
$qp->find("div.classname")->children()->...;
foreach ($qp->find("p img") as $img) {
print qp($img)->attr("src");
}
. В основном вы хотите использовать простые #id
и .class
или DIV
селектор тэгов для ->find()
. Но вы также можете использовать операторы XPath , которые иногда бывают быстрее. Также типичные методы jQuery, такие как ->children()
и ->text()
и особенно ->attr()
, упрощают извлечение правильных фрагментов HTML. (И уже имеют свои SGML-объекты, декодированные.)
$qp->xpath("//div/p[1]"); // get first paragraph in a div
QueryPath также позволяет вводить новые теги в поток (->append
), а затем выводить и префикс обновленного документа (->writeHTML
). Он может не только анализировать искаженный HTML, но также различные диалекты XML (с пространствами имен) и даже извлекать данные из микроформатов HTML (XFN, vCard).
$qp->find("a[target=_blank]")->toggleClass("usability-blunder");
.
phpQuery или QueryPath?
Обычно QueryPath лучше подходит для манипулирования документами. В то время как phpQuery также реализует некоторые псевдо-AJAX-методы (только HTTP-запросы), более похожие на jQuery. Говорят, что phpQuery часто быстрее, чем QueryPath (из-за меньшего количества общих функций).
Для получения дополнительной информации о различиях см. это сравнение на машине обратного пути от tagbyte.org . (Оригинальный источник пропал без вести, так что вот ссылка интернет-архива. Да, вы все равно можете найти недостающие страницы, люди.)
И вот всеобъемлющее введение QueryPath .
Преимущества
->find("a img, a object, div a")
Да, но это необходимо сделать для каждого проекта. Это опция, доступная в меню «Сборка» свойств проекта. Нажмите «Дополнительно» в правом нижнем углу, затем выберите нужную версию языка.
Примечание. Существует ошибка VS2015 (которая исправлена в редакторе 1), который вызывает ложные негативы при авто-свойствах только для получения. Чтобы получить наилучшие результаты, убедитесь, что вы установили последнее обновление.
Чтобы согласовать принятый ответ, чтобы быстро реализовать это в 100-х проектах и получить все конфигурации, а не только определенную конфигурацию, я массировал файлы csproj
и вставлял узел <LangVersion>5</LangVersion>
в качестве первого дочернего внутри первого голого безусловного узла <PropertyGroup>
:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<LangVersion>5</LangVersion>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>