Для выбора узлов и наборов узлов в XML документе XPath использует выражения путей. Узел выбирается следуя по заданному пути или по, так называемым, шагам.
Пример XML документа
Для демонстрации синтаксиса XPath будет использоваться следующий XML документ:
<?xml version="1.0" encoding="UTF-8"?>
<messages>
<note>
<heading date="10/01/2008">Напоминание</heading>
<body>Отправить письмо!</body>
</note>
<note>
<heading date="11/01/2008">Re: Напоминание</heading>
<body>Письмо отправлено</body>
</note>
</messages>
Выбор узлов
Чтобы выбрать узлы в XML документе, XPath использует выражения пути. Узел выбирается следуя по заданному пути. Наиболее полезные выражения пути:
Выражение | Результат |
---|---|
имя_узла | Выбирает все узлы с именем "имя_узла" |
/ | Выбирает от корневого узла |
// | Выбирает узлы от текущего узла, соответствующего выбору, независимо от их местонахождения |
. | Выбирает текущий узел |
.. | Выбирает родителя текущего узла |
@ | Выбирает атрибуты |
В следующей таблице приводятся некоторые выражения XPath, позволяющие сделать некоторые выборки по демонстрационному XML документу:
Выражение XPath | Результат |
---|---|
messages | Выбирает все узлы с именем "messages" |
/messages | Выбирает корневой элемент сообщений Примечание: Если путь начинается с косой черты ( / ), то он всегда представляет абсолютный путь к элементу! |
messages/note | Выбирает все элементы note, являющиеся потомками элемента messages |
//note | Выбирает все элементы note независимо от того, где в документе они находятся |
messages//note | Выбирает все элементы note, являющиеся потомками элемента messages независимо от того, где они находятся от элемента messages |
//@date | Выбирает все атрибуты с именем date |
Предикаты
Предикаты позволяют найти конкретный узел или узел с конкретным значением.
Предикаты всегда заключаются в квадратные скобки.
В следующей таблице приводятся некоторые выражения XPath с предикатами, позволяющие сделать выборки по демонстрационному XML документу:
Выражение XPath | Результат |
---|---|
/messages/note[1] | Выбирает первый элемент note, который является прямым потомком элемента messages. Примечание: В IE 5,6,7,8,9 первым узлом будет [0], однако согласно W3C это должен быть [1]. Чтобы решить эту проблему в IE, нужно установить опцию SelectionLanguage в значение XPath. В JavaScript: xml.setProperty("SelectionLanguage","XPath"); |
/messages/note[last()] | Выбирает последний элемент note, который является прямым потомком элемента messages. |
/messages/note[last()-1] | Выбирает предпоследний элемент note, который является прямым потомком элемента messages. |
/messages/note[position()<3] | Выбирает первые два элемента note, которые являются прямыми потомками элемента messages. |
//heading[@date] | Выбирает все элементы heading, у которых есть атрибут date |
//heading[@date="10/01/2008"] | Выбирает все элементы heading, у которых есть атрибут date со значением "10/01/2008" |
Выбор неизвестных заранее узлов
Чтобы найти неизвестные заранее узлы XML документа, XPath позволяет использовать специальные символы.
Спецсимвол | Описание |
---|---|
* | Соответствует любому узлу элемента |
@* | Соответствует любому узлу атрибута |
node() | Соответствует любому узлу любого типа |
В следующей таблице приводятся некоторые выражения XPath со спецсимволами, позволяющие сделать выборки по демонстрационному XML документу:
Выражение XPath | Результат |
---|---|
/messages/* | Выбирает все элементы, которые являются прямыми потомками элемента messages |
//* | Выбирает все элементы в документе |
//heading[@*] | Выбирает все элементы heading, у которых есть по крайней мере один атрибут любого типа |
Выбор нескольких путей
Использование оператора | в выражении XPath позволяет делать выбор по нескольким путям.
В следующей таблице приводятся некоторые выражения XPath, позволяющие сделать выборки по демонстрационному XML документу:
Выражение XPath | Результат |
---|---|
//note/heading | //note/body | Выбирает все элементы heading И body из всех элементов note |
//heading | //body | Выбирает все элементы heading И body во всем документе |