Главная / Шпаргалки / Шпаргалка xpath
Шпаргалка xpath
grigoriev
18182
Ниже указан листин кода, к которому были написаны тестовые xpath запросы.
<?xml version="1.0" encoding="windows-1251" ?>
<tyresprice>
<tyres id="1" store="yes">
<manufacturer>Kumho</manufacturer>
<pattern>31x10.5R15</pattern>
<season>winter</season>
<price>9270</price>
</tyres>
<tyres id="2">
<manufacturer>Yokohama</manufacturer>
<pattern>275/55R17</pattern>
<season>winter</season>
<price>10030</price>
</tyres>
<tyres id="3" store="no">
<manufacturer>Nokian</manufacturer>
<pattern>295/40R20</pattern>
<season>summer</season>
<price>17370</price>
</tyres>
<tyres id="4" store="yes">
<manufacturer>TOYO</manufacturer>
<pattern>175/65R14</pattern>
<season>summer</season>
<price>2500</price>
</tyres>
</tyresprice>
Xpath синтаксис
Локаторы xpath
/ |
Выбирает весь документ |
// |
Выбирает элементы на любой глубине вложенности |
* |
Любой какой угодно элемент |
//* |
Выберет все элементы по отдельности (tyresprice, tyres, manufacturer, pattern, season, price) |
/tyresprice/tyres/* или//tyres/* |
Выберет все элементы из каждого tyres (manufacturer, pattern, season, price) |
Оси xpath выборки
self |
возвращает сам элемент |
child |
возвращает детей элемента |
parent |
возвращает родителя элемента |
attribute |
атрибут элемента |
descendant |
возвращает всех потомков элемента (всех детей и детей детей) |
descendant-or-self |
возвращает всех потомков выбранного элемента и сам элемент |
ancestor |
возвращает всех предков выбранного элемента |
ancestor-or-self |
возвращает всех предков выбранного элемента и сам элемент |
following |
Все элементы со своими детьми которые ниже по коду |
following-sibling |
Все ниже лежащие соседи без своих детей |
preceding |
Все элементы со своими детьми которые выше по коду |
preceding-sibling |
Все выше лежащие соседи без своих детей |
Сокращения xpath
tyresprice/child::tyres |
Аналог tyresprice/tyres вернёт всех детей всех tyres |
@ |
Аналог attribute:: |
tyresprice/tyres/ attribute::store |
Аналог tyresprice/tyres/@store вернёт все значения атрибута store всех tyres |
. |
Аналог self::node() узел выбирает сам себя |
.. |
Аналог parent::node() узел выбирает своего родителя |
Предикаты xpath
axis::node-test[predicate] |
Форма записи |
tyresprice/tyres[2] |
Предикат по положению, вернёт вторую марку шины |
tyresprice/tyres[last()] |
Вернёт последнюю марку шины |
tyresprice/tyres/price[.<10000] |
Вернёт price где цена ниже 10000 |
tyresprice/tyres/price[.<10000]/../manufacturer |
Вернёт названия шин цена которых ниже 10000 |
tyresprice/tyres[price<10000]/manufacturer |
Аналогичная запись |
tyresprice/tyres[@store] |
Предикат по присутствию, вернёт все шины у которых есть атрибут store |
Операции xpath
А and B, A or B |
Логические и или |
tyresprice/tyres[price<10000 and price>3000 ]/manufacturer |
Вернёт шины Kumho |
A+B, A-B, A*B,A div B |
Арифметические |
A=B, A!=B, A>B, A < B, A>=B, A<=B |
Сравнение |
Функции xpath
sum() |
Суммирует числовые значения узлов(нодов) |
concat(строка, строка, строка*) |
Склеивание строк |
starts-with(строка, строка) |
Определит есть ли в начале строки искомый кусок |
tyresprice/tyres/manufacturer [starts-with(., 'Kumho')] |
Вернёт узел, где в названии есть Kumho |
contains(строка, строка) |
Определяет есть ли в заданой строке искомая строка |
substring-before(строка, строка) |
Возврашает всё из строки что было до аргумента, заданного второй строкой |
substring-after(строка, строка) |
Возврашает всё из строки что было после аргумента, заданного второй строкой |
substring(строка, номер, номер) |
Возвращает кусок строки с заданного номера, до конца заданного номера, если второй номер не задан то до конца строки |
string-length(строка) |
Возвращает количество символов в заданной строке |
position() |
Возвращает позицию в виде числа искомого узла |
last() |
Возвращает позицию в виде числа последнего узла |
count() |
Возвращает количество нодов в выборке |
Работа xpath с php
$testurl="https://www.какойто адрес сайта";
//закачиваем страницу сайта
$testcont= file_get_contents($testurl);
//отключаем показ ошибок
libxml_use_internal_errors(true);
//получаем объект класса DOMDocument
$testdom = new DOMDocument();
//учтанавливаем нужные настройки
$testdom->preserveWhiteSpace = false;
$testdom->resolveExternals = false;
$testdom->validateOnParse = false;
// распарсиваем HTML документ
$testdom->loadHTML($testcont);
//получаем объект класса DOMXpath
$xpath = new DOMXpath($testdom);
//получаем элементы с помощью xpath
$testitems=$xpath->query("//*");
//выводим данные в цикле
foreach ($testitems as $myitem){
........
}
Поделиться: