XML DOM, XSLT, XPath

1 Июль 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 2 3

  1. комментарии (2) to “XML DOM, XSLT, XPath”

  2.   Павел -- Июнь 17, 2008

    Спасибо, то что нужно - “выжимки” :-)


  3.   Елена -- Фев 11, 2009

    Спасибо, нашла то что искала. Всё кратко и доступно.


Комментировать