XML DOM, XSLT, XPath
1 July 2007 – 14:02Оси XPath
ancestor:: Возвращает множество предков.
ancestor-or-self:: Возвращает множество предков и текущий элемент.
attribute:: Возвращает множество атрибутов текущего элемента.
child:: Возвращает множество потомков на один уровень ниже.
descendant:: Возвращает полное множество потомков.
descendant-or-self:: Возвращает полное множество потомков и текущий элемент.
following:: Возвращает необработанное множество, ниже текущего элемента.
following-sibling:: Возвращает множество элементов на том же уровне, следующих за текущим.
namespace:: Возвращает множество имеющее пространство имён
(т.е. присутствует аттрибут xmlns).
parent:: Возвращает предка на один уровень назад.
preceding:: Возвращает множество обработанных элементов исключая множество предков.
preceding-sibling:: Возвращает множество элементов на том же уровне, предшествующих текущему.
self:: Возвращает текущий элемент.
Существуют сокращения для некоторых осей, например:
attribute:: можно заменить на @ child:: часто просто опускают descendant:: можно заменить на // parent:: можно заменить на .. self:: можно заменить на .
шаг::= ось::шаблон_узла[предикат]
-
child::paraнаходит элементpara, являющийся непосредственным потомком узла контекста -
child::*собирает все элементы, являющиеся непосредственными потомками узла контекста -
child::text()собирает все текстовые узлы, являющиеся непосредственными потомками узла контекста -
child::node()собирает все непосредственные потомки текущего узла контекста независимо от типа этих узлов -
/descendant::olist/child::itemнаходит все элементыitem, которые имеют родителемolistи находятся в пределах документа, в котором располагается узел контекста -
child::para[position()=last()]находит последний непосредственный потомокparaтекущего узла контекста -
child::para[position()=last()-1]находит предпоследний непосредственный потомокparaтекущего узла контекста -
child::para[position()>1]среди непосредственных потомков текущего узла контекста собирает всеpara, за исключением первого -
following-sibling::chapter[position()=1]находит следующийchapter, имеющий с узлом контекста общего родителя -
/descendant::figure[position()=42]находит в документе сорок второй элементfigure -
child::para[attribute::type='warning'][position()=5]среди непосредственных потомков текущего узла контекста с названиемparaи имеющих атрибутtypeсо значениемwarningнаходит пятый элемент -
child::para[position()=5][attribute::type="warning"]среди непосредственных потомковparaузла контекста выбирает пятый элемент, при условии что он имеет атрибутtypeсо значениемwarning -
child::chapter[child::title='Introduction']среди непосредственных потомковchapterтекущего узла контекста выбирает тот, у которого в свою очередь имеется один или несколько непосредственных потомковtitleсо строковым значениемIntroduction -
child::*[self::chapter or self::appendix]среди непосредственных потомков текущего узла контекста находитchapterиappendix -
child::*[self::chapter or self::appendix][position()=last()]из множества непосредственных потомков текущего узла контекстаchapterиappendixвыбирает последний
5 групп функций:
Системные функции
node-set document(objec!, node-set?)
Возвращает документ указанный в параметре objec!.
string format-number(number, string, string?)
Форматирует число согласно образцу указанному во втором параметре, третий параметр указывает именованный формат числа, который должен быть учтён.
string generate-id(node-set?)
Возвращает строку, являющуюся уникальным идентификатором.
node-set key(string, objec!)
Возвращает множество с указанным ключом, аналогично функции id для идентификаторов.
string unparsed-entity-uri(string)
Возвращает непроанализированный URI, если такового нет, возвращает пустую строку.
boolean element-available(string)
Проверяет доступен ли элемент или множество указанное в параметре. Параметр рассматривается как XPath.
boolean function-available(string)
Проверяет доступна ли функция указанная в параметре. Параметр рассматривается как XPath.
objec! system-property(string)
Возвращает системные переменные параметр может быть:
- xsl:version - возвращает версию XSL-T процессора.
- xsl:vendor - возвращает производителя XSL-T процессора.
- xsl:vendor-url - возвращает URL идентифицирующий производителя.
Если используется неизвестный параметр, функция возвращает пустую строку
boolean lang(string)
Возвращает истину если у текущего тэга имеется атрибут xml:lang, либо родитель тэга имеет атрибут xml:lang и в нем указан совпадающий строке символ.
Функции с множествами
- * - обозначает любое имя или набор символов, @* - любой атрибут
- $name - обращение к переменной, где name - имя переменной или параметра.
- [] - дополнительные условия выборки
- {} - если применяется внутри тега другого языка (например HTML), то XSL-T процессор, то что написанно в фигурных скобках рассматривает как XPath.
- / - определяет уровень дерева
node-set node()
Возвращает элемент(ы). Для этой функции часто используют заменитель '*', но в отличии от звездочки - node() возвращает и текстовые элементы.
node-set current()
Возвращает множество из одного элемента, который является текущим. Если мы делаем обработку множества с условиями, то единственным способом дотянутся из этого условия до текущего элемента будет данная функция.
number position()
Возвращает позицию элемента в множестве. Корректно работает только в цикле <xsl:for-each/>
number last()
Возвращает номер последнего элемента в множестве. Корректно работает только в цикле <xsl:for-each/>
number count(node-set)
Возвращает количество элементов в node-set
string name(node-set?)
Возвращает полное имя первого тэга в множестве.
string namespace-uri(node-set?)
Возвращает ссылку на url определяющий пространство имён.
string local-name(node-set?)
Возвращает имя первого тэга в множестве, без пространства имён.
node-set id(objec!)
Находит элемент с уникальным идентификатором
Строковые функции
string text()
Возвращает текстовое содержимое элемента. По сути возврашает объединенное множество текстовых элементов на один уровень ниже.
string string(object?)
Конвертирует объект в строку.
string concat(string, string, string*)
Объеденяет две или более строк
number string-length(string?)
Возвращает длину строки.
boolean contains(string, string)
Возвращает истину, если первая строка содержит вторую, иначе возвращает ложь.
string substring(string, number, number?)
Возвращает строку вырезанную из строки начиная с указанного номера, и если указан второй номер - количество символов.
string substring-before(string, string)
Если найдена вторая строка в первой, возвращает строку до первого вхождения второй строки.
string substring-after(string, string)
Если найдена вторая строка в первой, возвращает строку после первого вхождения второй строки.
boolean starts-with(string, string)
Возвращает истину если вторая строка входит в начало первой, иначе возвращает ложь.
string normalize-space(string?)
Убирает лишние и повторные пробелы, а так же управляющие символы, заменяя их пробелами.
string translate(string, string, string)
Заменяет символы первой строки, которые встречаются во второй строке, на соответствующие по позиции символам из второй строки символы из третьей строки. translate("bar","abc","ABC") вернет BAr.
Логические функции
- or - логическое "или"
- and - логическое "и"
- = - логическое "равно"
- < (<)- логическое "меньше"
- > (>)- логическое "больше"
- <= (<=)- логическое "меньше либо равно"
- >= (>=)- логическое "больше либо равно"
boolean boolean(object)
Приводит объект к логическому типу
boolean true()
Возвращает истину.
boolean false()
Возвращает ложь.
boolean not(boolean)
Отрицание, возвращает истину если аргумент ложь и наоборот.
Числовые функции
- + - сложение
- - - вычитание
- * - умножение
- div - деление
- mod - остаток от деления
number number(object?)
Переводит объект в число
number sum(node-set)
Вернёт сумму множества, каждый тэг множества будет преобразован в строку и из него получено число.
number floor(number)
Возвращает наибольшее целое число, не большее, чем аргумент.
number ceiling(number)
Возвращает наименьшее целое число, не меньшее, чем аргумент.
number round(number)
Округляет число по математическим правилам.

комментарии (1) to “XML DOM, XSLT, XPath”
Павел -- Jun 17, 2008
Спасибо, то что нужно - “выжимки”