
Приклад XML-файлу:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/bind9.xsl"?>
<statistics version="3.11">
<server>
<boot-time>2020-03-03T11:56:35.895Z</boot-time>
<config-time>2020-03-03T11:56:36.007Z</config-time>
<current-time>2020-03-03T12:37:36.479Z</current-time>
<version>9.14.11</version>
<counters type="opcode">
<counter name="QUERY">26305</counter>
<counter name="IQUERY">0</counter>
...
</counters>
<counters type="rcode">
<counter name="NOERROR">14899</counter>
<counter name="FORMERR">0</counter>
...
</counters>
</server>
</statistics>
В CentOS 8 для обробки зручно використовувати xmllint.
Приклади базового використання xpath:
$ xmllint --xpath 'counters' bind.xml // Обрати всі елементи counters, не залежно від того де вони розміщуються
<counters type="opcode">
...
</counters>
<counters type="rcode">
...
</counters>
$ xmllint --xpath '/statistics' bind.xml // Обрати всі елементи statistics, які є кореневими
<statistics version="3.11">
...
</statistics>
$ xmllint --xpath 'statistics/counters' bind.xml // Обрати всі елементи counters, які обов'язково є дитиною statistics
XPath set is empty
$ xmllint --xpath '//counters' bind.xml // Обрати всі елементи counters, не залежно від того де вони знаходяться
<counters type="opcode">
...
</counters>
<counters type="rcode">
...
</counters>
$ xmllint --xpath 'statistics//counters' bind.xml // Обрати всі елементи counters, які належать дл statistics, але знаходяться в ньому будь-де
<counters type="opcode">
...
</counters>
<counters type="rcode">
...
</counters>
$ xmllint --xpath '//counters/..' bind.xml
<view>
<counters type="opcode">
...
</counters>
</view>
$ xmllint --xpath '//@type' bind.xml // Selects all attributes that are named lang, no matter where they are
type="opcode" type="rcode" type="qtype" type="nsstat" type="zonestat" type="resstat" type="resqtype"
Регулярні вирази
| nodename | Обрати всі елементи з іменем “nodename” |
| / | Обрати елементи з кореневого розділу |
| // | Обрати елементи, які розміщуються у вказаному попередньо елементі, але знаходяться в ньому будь-де |
| . | Обрати поточний елемент |
| .. | Обрати батьківський елемент для поточного елементу |
| @ | Обрати атрибути |
Предикати
Предикати використовуються для пошуку конкретного вузла або вузла, який містить конкретне значення. Присудки завжди вбудовані у квадратні дужки. У таблиці нижче ми перерахували деякі вирази шляху з предикатами та результат виразів:
/statistics/server/counters[1] - обрати перший елемент counters
/statistics/server/counters[last()] - обрати останній елемент counters
/statistics/server/counters[last()-1] - обрати передостанній елемент counters
/statistics/server/counters[position()<3] - обрати перші 2 елементи counters
//counters[@type] - обрати елементи counters які мають атрибут будь-який type
//counters[@type="opcode"] - обрати елементи counters які мають атрибут type="opcode"
/statistics/server/counters[counter>20000] - обрати елементи counters які мають елемент counter, значення якого більше 20000
/statistics/server/counters[counter>20000]/counter - обрати елементи counter, батьківський елемент counter мають елемент counter, значення якого більше 20000
Невідомі елементи
/statistics/* - обрати всі дочірні елементи для statistics
//counter[@*] - обрати всі елементи counter, які мають будь-який атрибут
Поєднання директорій
/statistics/server/counters[1] | /statistics/server/counters[2] - обарти перший або другий елементи counters
Доступні оператори в виразах XPath: |, +, -, *, div, =, !=, <, <=, >, >=, or, and, mod
Функції XPath:
count() - повертає кількість вузлів в наборі
number() - конвертує аргумент в числовий тип
string() - конвертує аргумент в рядок