Пример 1
Базовый синтаксис XPath аналогичен поиску файлов в файловой системе. Если путь начинается с косой черты /, то путь представляет собой абсолютный путь к элементу.
/ААА
Выберите корневой элемент AAA
<ААА>
<ВВВ/>
<CCC/>
<ВВВ/>
<ВВВ/>
<ДДД>
<ВВВ/>
</ДДД>
<CCC/>
</AAA>
/ААА/CCC
Выберите все дочерние элементы CCC AAA.
<ААА>
<ВВВ/>
<CCC/>
<ВВВ/>
<ВВВ/>
<ДДД>
<ВВВ/>
</ДДД>
<CCC/>
</AAA>
/AAA/DDD/BBB
Выбирает все дочерние элементы DDD, дочерний элемент AAA.
<ААА>
<ВВВ/>
<CCC/>
<ВВВ/>
<ВВВ/>
<ДДД>
<ВВВ/>
</ДДД>
<CCC/>
</ААА>
Пример 2
Если путь начинается с двойной косой черты //, это означает, что в документе выбираются все элементы, удовлетворяющие правилам после двойной косой черты // (независимо от иерархической связи) //BBB
Выбрать все элементы BBB
<ААА>
<ВВВ/>
<CCC/>
<ВВВ/>
<ДДД>
<ВВВ/>
</ДДД>
<CCC>
<ДДД>
<ВВВ/>
<ВВВ/>
</ДДД>
</CCC>
</ААА>
//ДДД/ВВВ
Выберите все элементы BBB, родительским элементом которых является DDD.
<ААА>
<ВВВ/>
<CCC/>
<ВВВ/>
<ДДД>
<ВВВ/>
</ДДД>
<CCC>
<ДДД>
<ВВВ/>
<ВВВ/>
</ДДД>
</CCC>
</ААА>
Пример 3
Звездочка* означает выбор всех элементов, расположенных по пути до звездочки.
/ААА/ССС/ДДД/*
Выберите все элементы с путями, прикрепленными к /AAA/CCC/DDD.
<ААА>
<ХХХ>
<ДДД>
<ВВВ/>
<ВВВ/>
<ЕЕЕ/>
<ФФФ/>
</ДДД>
</XXX>
<CCC>
<ДДД>
<ВВВ/>
<ВВВ/>
<ЕЕЕ/>
<ФФФ/>
</ДДД>
</CCC>
<CCC>
<ВВВ>
<ВВВ>
<ВВВ/>
</БББ>
</БББ>
</CCC>
</ААА>
/*/*/*/ВВВ
Выберите все элементы BBB, имеющие 3 элемента-предка.
<ААА>
<ХХХ>
<ДДД>
<ВВВ/>
<ВВВ/>
<ЕЕЕ/>
<ФФФ/>
</ДДД>
</XXX>
<CCC>
<ДДД>
<ВВВ/>
<ВВВ/>
<ЕЕЕ/>
<ФФФ/>
</ДДД>
</CCC>
<CCC>
<ВВВ>
<ВВВ>
<ВВВ/>
</БББ>
</БББ>
</CCC>
</ААА>
//*
Выбрать все элементы
<ААА>
<ХХХ>
<ДДД>
<ВВВ/>
<ВВВ/>
<ЕЕЕ/>
<ФФФ/>
</ДДД>
</XXX>
<CCC>
<ДДД>
<ВВВ/>
<ВВВ/>
<ЕЕЕ/>
<ФФФ/>
</ДДД>
</CCC>
<CCC>
<ВВВ>
<ВВВ>
<ВВВ/>
</БББ>
</БББ>
</CCC>
</ААА>
Пример 4
Выражение в квадратном номере может дополнительно указывать элемент, где число представляет положение элемента в наборе выбора, а функция Last() представляет последний элемент в наборе выбора
/AAA/BBB[1]
.
Выберите первый дочерний элемент BBB AAA.
<ААА>
<ВВВ/>
<ВВВ/>
<ВВВ/>
<ВВВ/>
</ААА>
/ААА/БББ[последний()]
Выберите последний дочерний элемент BBB AAA.
<ААА>
<ВВВ/>
<ВВВ/>
<ВВВ/>
<ВВВ/>
</ААА>
Пример 5
//@идентификатор
Выбрать все атрибуты идентификатора
<ААА>
<идентификатор BBB = "b1"/>
<идентификатор BBB = "b2"/>
<имя BBB = "bbb"/>
<ВВВ/>
</ААА>
//BBB[@id]
Выберите элементы BBB с атрибутами id.
<ААА>
<идентификатор BBB = "b1"/>
<идентификатор BBB = "b2"/>
<имя BBB = "bbb"/>
<ВВВ/>
</ААА>
//BBB[@имя]
Выберите элемент BBB с атрибутом имени.
<ААА>
<идентификатор BBB = "b1"/>
<идентификатор BBB = "b2"/>
<имя BBB = "bbb"/>
<ВВВ/>
</ААА>
//BBB[@*]
Выберите элементы BBB с любыми атрибутами.
<ААА>
<идентификатор BBB = "b1"/>
<идентификатор BBB = "b2"/>
<имя BBB = "bbb"/>
<ВВВ/>
</ААА>
//ВВВ[не(@*)]
Выберите элементы BBB без атрибутов
<ААА>
<идентификатор BBB = "b1"/>
<идентификатор BBB = "b2"/>
<имя BBB = "bbb"/>
<ВВВ/>
</ААА>
Пример 6
Значение атрибута можно использовать в качестве критерия выбора. Функция нормализации пространства удаляет начальные и конечные пробелы и заменяет последовательные строки пробелов одним пробелом
//BBB[@id='b1']
Выберите элемент BBB, который содержит идентификатор атрибута и его значение 'b1'.
<ААА>
<идентификатор BBB = "b1"/>
<имя BBB = " bbb "/>
<имя BBB = "bbb"/>
</ААА>
//BBB[@name='bbb']
Выберите элемент BBB, который содержит имя атрибута и его значение «bbb».
<ААА>
<идентификатор BBB = "b1"/>
<имя BBB = " bbb "/>
<имя BBB = "bbb"/>
</ААА>
//BBB[normalize-space(@name)='bbb']
Выберите элемент BBB, который содержит имя атрибута и его значение (после удаления начальных и конечных пробелов с помощью функции нормализации пространства) — 'bbb'
<ААА>
<идентификатор BBB = "b1"/>
<имя BBB = " bbb "/>
<имя BBB = "bbb"/>
</ААА>
Пример 7
Функция count() может подсчитать количество выбранных элементов
//*[count(BBB)=2]
Выберите элементы с двумя дочерними элементами BBB.
<ААА>
<CCC>
<ВВВ/>
<ВВВ/>
<ВВВ/>
</CCC>
<ДДД>
<ВВВ/>
<ВВВ/>
</ДДД>
<ЕЕЕ>
<CCC/>
<ДДД/>
</ЕЕЕ>
</ААА>
//*[счет(*)=2]
Выберите элемент с двумя дочерними элементами
<ААА>
<CCC>
<ВВВ/>
<ВВВ/>
<ВВВ/>
</CCC>
<ДДД>
<ВВВ/>
<ВВВ/>
</ДДД>
<ЕЕЕ>
<CCC/>
<ДДД/>
</ЕЕЕ>
</ААА>
//*[счет(*)=3]
Выберите элемент с тремя дочерними элементами.
<ААА>
<CCC>
<ВВВ/>
<ВВВ/>
<ВВВ/>
</CCC>
<ДДД>
<ВВВ/>
<ВВВ/>
</ДДД>
<ЕЕЕ>
<CCC/>
<ДДД/>
</ЕЕЕ>
</ААА>
Пример 8
Функция name() возвращает имя элемента, функция start-with() возвращает true, когда первая строка параметра функции начинается со второго символа параметра, а функция contains() возвращает true, когда возвращается ее первый строковый параметр. true, если включен второй строковый параметр
//*[name()='BBB']
Выберите все элементы с именем BBB (здесь эквивалентно //BBB).
<ААА>
<BCC>
<ВВВ/>
<ВВВ/>
<ВВВ/>
</BCC>
<ДДБ>
<ВВВ/>
<ВВВ/>
</DDB>
<БЭК>
<CCC/>
<ДБД/>
</BEC>
</ААА>
//*[начинается с(name(),'B')]
Выберите все элементы, имена которых начинаются с «B».
<ААА>
<BCC>
<ВВВ/>
<ВВВ/>
<ВВВ/>
</BCC>
<ДДБ>
<ВВВ/>
<ВВВ/>
</ДДБ>
<БЭК>
<CCC/>
<ДБД/>
</BEC>
</ААА>
//*[содержит(name(),'C')]
Выберите все элементы, имена которых содержат "C".
<ААА>
<BCC>
<ВВВ/>
<ВВВ/>
<ВВВ/>
</BCC>
<ДДБ>
<ВВВ/>
<ВВВ/>
</DDB>
<БЭК>
<CCC/>
<ДБД/>
</BEC>
</ААА>
Пример 9
Несколько путей можно объединить с помощью разделителя |
//CCC //BBB |
Выберите все элементы CCC и BBB.
<ААА>
<ВВВ/>
<CCC/>
<ДДД>
<CCC/>
</ДДД>
<ЕЕЕ/>
</ААА>
/ААА/ЕЕЕ //БББ
Выберите все элементы BBB и все элементы EEE, которые являются дочерними элементами AAA.
<ААА>
<ВВВ/>
<CCC/>
<ДДД>
<CCC/>
</ДДД>
<ЕЕЕ/>
</ААА>
/ААА/ЕЕЕ | //ДДД/ССС | /ААА //БББ |
Нет ограничений на количество путей, которые можно объединить.
<ААА>
<ВВВ/>
<CCC/>
<ДДД>
<CCC/>
</ДДД>
<ЕЕЕ/>
</ААА>
Пример 10
Дочерняя ось содержит дочерние элементы контекстного узла. В качестве оси по умолчанию ее можно игнорировать
/AAA
.
Эквивалент /child::AAA
<ААА>
<ВВВ/>
<CCC/>
</ААА>
/ребенок::ААА
Эквивалент /AAA
<ААА>
<ВВВ/>
<CCC/>
</ААА>
/ААА/ВВВ
Эквивалент /child::AAA/child::BBB
<ААА>
<ВВВ/>
<CCC/>
</ААА>
/child::AAA/child::BBB
Эквивалент /AAA/BBB
<ААА>
<ВВВ/>
<CCC/>
</ААА>
/child::ААА/БББ
Оба могут быть объединены
<ААА>
<ВВВ/>
<CCC/>
</AAA>
Пример 11
Ось потомков содержит потомков узла контекста. Потомок относится к дочернему узлу или дочернему узлу дочернего узла и т. д., поэтому ось потомков не содержит узлов атрибутов и пространств имен
/descendant::*
.
Выбирает всех потомков корневого элемента документа. То есть выбираются все элементы.
<ААА>
<ВВВ>
<ДДД>
<CCC>
<ДДД/>
<ЕЕЕ/>
</CCC>
</ДДД>
</БББ>
<CCC>
<ДДД>
<ЕЕЕ>
<ДДД>
<ФФФ/>
</ДДД>
</ЕЕЕ>
</ДДД>
</CCC>
</ААА>
/ААА/ВВВ/потомок::*
Выбирает все элементы-потомки /AAA/BBB.
<ААА>
<ВВВ>
<ДДД>
<CCC>
<ДДД/>
<ЕЕЕ/>
</CCC>
</ДДД>
</БББ>
<CCC>
<ДДД>
<ЕЕЕ>
<ДДД>
<ФФФ/>
</ДДД>
</ЕЕЕ>
</ДДД>
</CCC>
</ААА>
//CCC/потомок::*
Выберите все элементы, среди предков которых есть CCC.
<ААА>
<ВВВ>
<ДДД>
<CCC>
<ДДД/>
<ЕЕЕ/>
</CCC>
</ДДД>
</БББ>
</ААА>