Собрал на одну страницу YS, 22.08.2006
/AAA/BBB[1] - Будет выбран первый потомок BBB элемента AAA
/AAA/BBB[last()] - Будет выбран последний потомок BBB элемента AAA
//@id - Выбираются все атрибуты @id
//BBB[@id] - Выбираются элементы BBB, имеющие атрибут id
//BBB[@*] - Выбираются элементы BBB, имеющие хоть какой-нибудь атрибут
//BBB[not(@*)] - Выбираются элементы BBB, не имеющие ни одного атрибута
//BBB[@id='b1'] - Выбираются элементы BBB, имеющие атрибут id со значением b1
//BBB[normalize-space(@name)='bbb'] - Выбираются элементы BBB, имеющие атрибут name со значением, которое после нормализации будет идентично bbb
//*[count(BBB)=2] - Выбираются элементы, имеющие два дочерних элемента BBB
//*[count(*)=2] - Выбираются элементы, имеющие два произвольных дочерних элемента
//*[name()='BBB'] - Выбираются все элементы с именем BBB; эквивалентно пути //BBB
//*[starts-with(name(),'B')] - Выбираются все элементы, имя которых начинается с B
//*[contains(name(),'C')] - Выбираются все элементы, имя которых содержит C
//*[string-length(name()) = 3] - Выбираются все элементы, имя которых состоит из трех символов
//*[string-length(name()) < 3] - Выбираются все элементы, имя которых состоит из двух или одного символа
//CCC | //BBB - Выбираются все элементы CCC и BBB
/AAA/EEE | //BBB - Выбираются все элементы BBB и все элементы EEE, чьим прямым родителем является корневой элемент AAA
/child::AAA - Эквивалентно выражению /AAA
/descendant::* - Выбираются все потомки корневого узла, то есть все элементы
/AAA/BBB/descendant::* - Выбираются все потомки элементов, соответствующих пути /AAA/BBB
//CCC/descendant::* - Выбираются все элементы, имеющие в качестве предка элемент CCC
//DDD/parent::* - Выбираются все родители элемента DDD
/AAA/BBB/DDD/CCC/EEE/ancestor::* - Выбираются все узлы, перечисленные в этом абсолютном пути
//FFF/ancestor::* - Выбираются все предки элемента FFF
/AAA/BBB/following-sibling::*
//CCC/following-sibling::*
/AAA/XXX/preceding-sibling::*
//CCC/preceding-sibling::*
/AAA/XXX/following::*
//ZZZ/following::*
/AAA/XXX/preceding::*
//GGG/preceding::*
/AAA/XXX/descendant-or-self::*
//CCC/descendant-or-self::*
/AAA/XXX/DDD/EEE/ancestor-or-self::*
//GGG/ancestor-or-self::*
//GGG/ancestor::*
//GGG/descendant::*
//GGG/following::*
//GGG/preceding::*
//GGG/self::*
//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*
//BBB[position() mod 2 = 0 ]
//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]
//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]
Функция last возвращает число, равное размеру контекста обрабатываемого выражения.
Функция position возвращает число, равное положению в контексте обрабатываемого выражения.
Функция count возвращает количество узлов в наборе, представленном в качестве аргумента.
Функция id находит элементы по их уникальному идентификатору. Если аргументом функции id является набор узлов, то ее результатом будет объединение узлов, полученных в результате вызова функции id для строкового значения каждого узла в наборе, указанном в качестве аргумента. Если аргумент функции id относится к какому-либо другому типу, то этот аргумент сперва преобразуется в строку как при вызове функции string. Затем полученная строка разбивается на лексемы, разделенные пробельными символами (пробельный символ - это любая последовательность символов, соответствующих сценарию S). Результатом вызова функции в этом случае является набор узлов, состоящий из элементов, относящихся к тому же документу, где находился узел контекста, и имеющих уникальный идентификатор, равный одной из лексем, представленных в этом списке.
id("foo") находит элемент с уникальным идентификатором foo
id("foo")/child::para[position()=5] среди непосредственных потомков элемента с уникальным идентификатором foo находит пятый элемент para
Среди набора узлов, указанного в аргументе, функция local-name находит тот узел, который в документе встретится первым, и выделяет локальную часть его расширенного имени. Если в аргументе функции представлен пустой набор узлов или первый обнаруженный узел не имеет расширенного имени, возвращается пустая строка. Если аргумент функции отсутствует, то по умолчанию используется набор, состоящий из единственного члена - узла контекста.
В наборе, указанном в аргументе, функция namespace-uri находит тот узел, который в документе встретится первым, и в его расширенном имени выделяет URI пространства имен. Если указанный в аргументе набор узлов пуст, первый найденный узел не имеет расширенного имени, или же URI пространства имен в расширенном имени оказался нулевым, то функция возвращает пустую строку. Если аргумент отсутствует, то по умолчанию берется набор, в котором узел контекста является единственным членом.
Замечание: Для узлов, которые не соответствуют ни элементам, ни атрибутам, функция namespace-uri возвращает пустую строку.
В наборе, указанном в аргументе, функция name находит узел, который в документе встретится первым, и возвращает строку, содержащую QName, которое представляет расширенное имя данного узла. Указанная конструкция QName должна представлять расширенное имя, исходя из деклараций пространств имен, доступная для того узла, чье расширенное имя должно быть представлено. Как правило, это тот самый QName, который был представлен в исходном документе XML. Однако это не обязательно должно быть так в случае, когда декларации, воздействующие на данный узел, с одним и тем же пространством имен связывают несколько префиксов. Тем не менее, реализация может содержать сведения о первоначальном префиксе представляемых узлов, в таком случае может выполняться проверка с тем, чтобы возвращаемая строка была всегда такой же, как QName, используемый в исходном документе XML. Если указанный в аргументе набор узлов пуст или первый узел не имеет расширенного имени, возвращается пустая строка. Если аргумент опущен, то по умолчанию используется набор, содержащий только узел контекста.
Замечание: Для узлов, не являющихся ни элементом, ни атрибутом, строка, возвращаемая функцией name, будет той же самой, что и строка, возвращаемая функцией local-name.
Функция string преобразует объект в строку следующим образом:
Если аргумент опущен, то по умолчанию используется набор узлов, единственным членом которого является узел контекста.
Замечание: Функция string не предназначена для преобразования чисел в строки для показа пользователю. Для этой цели предназначены функция format-number и элемент xsl:number из [XSLT].
Функция concat возвращает объединение представленных аргументов.
Функция starts-with возвращает true если строка второго аргумента совпадает с началом строки первого аргумента. В противном случае функция возвращает false.
Функция contains возвращает true если строка второго аргумента является частью строки первого аргумента. В противном случае функция возвращает false.
Функция substring-before возвращает ту часть строки первого аргумента, которая предшествует первому появлению строки второго аргумента. Если строка второго аргумента не содержится в строке первого аргумента, то функция возвращает пустую строку. Например, substring-before("1999/04/01","/") возвратит 1999.
Функция substring-after возвращает ту часть строки первого аргумента, которая следует за первым появлением строки второго аргумента. Если строка второго аргумента не содержится в строке первого аргумента, функция возвращает пустую строку. Например, substring-after("1999/04/01","/") возвращает 04/01, а substring-after("1999/04/01","19") возвращает 99/04/01.
Функция substring возвращает ту часть строки первого аргумента, которая начинается с позиции, указанной вторым аргументом, и имеет длину, указанную в третьем аргументе. Например, substring("12345",2,3) возвращает "234". Если третий аргумент не был представлен, функция возвращает подстроку, начинающуюся с позиции, указанной во втором аргументе, и продолжащуюся до конца строки. Например, substring("12345",2) возвращает "2345".
Точнее выражаясь, каждый символ в строке имеет номер позиции: позиция первого символа - 1, второго символа - 2 и т.д.
Замечание: Такой порядок отличается от принятого в Java и ECMAScript, где метод String.substring считает позицию первого символа нулевой.
Возвращаемая подстрока содержит те символы, позиция которых больше или равна округленному значению второго аргумента, а также, если был указан третий аргумент, меньше чем сумма округленных значений второго и третьего аргументов. Использовавшиеся выше операции сравнения и сложения отвечают правилам стандарта IEEE 754, округление осуществляется как при вызове функции round. Приведенные далее примеры иллюстрируют различные нестандартные ситуации:
Функция string-length возвращает число символов в строке. Если аргумент опущен, то по умолчанию берется узел контекста и преобразуется в строку, иными словами, берется строковое значение текущего узла контекста.
Функция normalize-space возвращает строку аргумента с нормализацией пробельных символов. Сюда входит удаление начальных и завершающих пробельных символов, а также замена оставшихся последовательностей пробельных символов одиночными пробелами. Пробельными считаются символы, являющиеся таковыми согласно сценарию S в языке XML. Если аргумент опущен, то по умолчанию в строку преобразуется узел контекста, иными словами, в качестве аргумента берется строковое значение текущего узла контекста.
Функция translate возвращает строку первого аргумента, в которой символы, указанные в строке второго аргумента, заменены символами строки третьего аргумента в соответствующей позиции. Например, translate("bar","abc","ABC") возвращает строку BAr. Если в строке второго аргумента имеется символ, для которого нет парного символа в соответствующей позиции третьей строки (поскольку строка второго аргумента длиннее строки третьего аргумента), то все экземпляры этого символа изымаются из первой строки. Например, translate("--aaa--","abc-","ABC") возвращает "AAA". Если какой-либо символ встретился во второй строке несколько раз, то правило замены определяется первым встреченным экземпляром. Если строка третьего аргумента длиннее, чем строка второго, лишние символы игнорируются.
Замена: Функция translate не может обеспечить преобразование регистра для всех языков. Для преобразования регистра в будущих версии XPath могут появиться дополнительные функции.
Функция boolean преобразует аргумент в булево значение следующим образом:
Функция not возвращает true тогда и только тогда, когда ее аргументом является false, и false в противном случае.
Функция true возвращает true.
Функция false возвращает false.
Функция lang возвращает true или false в зависимости от того, является ли язык узла контекста, указываемый в атрибутах xml:lang, тем же самым языком (или подмножеством языка), что указан в строке атрибута. Язык узла контекста задается значением атрибута xml:lang, указанного в этом узле, либо, если сам узел контекста не имеет атрибута xml:lang, то значением атрибута xml:lang у его ближайшего предка, имеющего такой атрибут. Если требуемый атрибут не найден, функция lang возвращает false. Если же атрибут найден, то функция lang возвращает true когда значение этого атрибута равно значению аргумента. При этом регистр игнорируется. Кроме того, если значение атрибута имеет суффикс, начинающийся с дефиса (-), то перед сравнением такой суффикс может быть отброшен. Например, вызов функции lang("en") возвращает true если узлом контекста является любой из пяти указанных элементов:
<para xml:lang="en"/>
<div xml:lang="en"><para/></div>
<para xml:lang="EN"/>
<para xml:lang="en-us"/>