XPath

XPath (XML Path Language) является языком для обращения к частям XML-документа.

XPath был создан чтобы организовать доступ к элементам документа XML из файла стилей XSLT. XPath создан на основе XML и является стандартом консорциума W3C.

В XPath используется компактный синтаксис, отличный от принятого в XML.

В 2007 году завершится разработка версии 2.0, которая теперь является составной частью языка XQuery.

Первые мазки

Здесь стоит остановиться и вспомнить, что XML документ имеет древовидную структуру. В документе имеется всегда один и только один корневой элемент. Инструкция <?xml version="1.0"?> к дереву отношения не имеет. У элементов дерева существуют потомки (или дети) и предки (или родители), у корневого элемента предков нет.

Элементы дерева могут имет уровни вложености (далее уровни). У элементов на одном уровне бывают предыдущие и следующие элементы, соответственно у первого элемента нет предыдущего у последнего нет следующего.

<root>              - корневой элемент  
    <node1>         - предок - root, следующий на уровне node2, имеет потомка node11  
        <node11/>   - имеет предка node1  
    </node1>     
    <node2/>        - предыдущий элемент node1, следующий node3, предок - root  
    <node3/>     
</root>     

XPath призван помочь обходить всевозможные деревья, вытаскивать необходимые элементы из другой ветви относительно точки обхода, узнавать родителей, детей, атрибуты, короче это полноценный язык навигации по дереву.

Оси

Оси это база языка 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::       можно заменить на .

Дополнением к базе является набор функций, которые делятся на 5 групп:

  • Системные функции
node-set document(object, node-set?)

Возвращает документ указанный в параметре object.

string format-number(number, string, string?)

Форматирует число согласно образцу указанному во втором параметре, третий параметр указывает именованный формат числа, который должен быть учтён.

string generate-id(node-set?)

Возвращает строку, являющуюся уникальным идентификатором.

node-set key(string, object)

Возвращает множество с указанным ключом, аналогично функции id для идентификаторов.

string unparsed-entity-uri(string)

Возвращает непроанализированный URI, если такового нет, возвращает пустую строку.

boolean element-available(string)

Проверяет доступен ли элемент или множество указанное в параметре. Параметр рассматривается как XPath.

boolean function-available(string)

Проверяет доступна ли функция указанная в параметре. Параметр рассматривается как XPath.

object 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(object)

Находит элемент с уникальным идентификатором

  • Строковые функции
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 - логическое "и"
  • = - логическое "равно"
  • < (&lt;)- логическое "меньше"
  • > (&gt;)- логическое "больше"
  • <= (&lt;=)- логическое "меньше либо равно"
  • >= (&gt;=)- логическое "больше либо равно"
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)

Округляет число по математическим правилам.

Ссылки

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home