XPath

Здесь стоит остановиться и вспомнить, что XML документ имеет древовидную структуру. В документе имеется всегда один и только один корневой элемент, тэг <?xml version="1.0" ?> к дереву отношения не имеет (для XSL-T Xalan перед этим тегом не должно стоять ни каких пробелов). У элементов (или тэгов) дерева существуют потомки (или родители) и предки (или дети), у корневого элемента предков нет.
Элементы дерева могут имет уровни вложености (далее уровни). У элементов на одном уровне быают предидущие и следующие элементы, соответственно у первого элемента нет предидущего у последнего нет следующего.

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


Оси

-->Пример<--

ancestor:: Возвращает множество предков.
ancestor-or-self:: Возвращает множество предков и текущий элемент.
attribute:: Возвращает множество атрибутов текущего элемента.
child:: Возвращает множество потомков на один уровень ниже.
descendant:: Возвращает полное множество потомков.
descendant-or-self::  Возвращает полное множество потомков и текущий элемент.
following:: Возвращает необработтанное множество, ниже текущего элемента.
following-sibling:: Возвращает множество элементов на том же уровне, следующих за текущим.
namespace:: Возвращает множество имеющее пространство имён (т.е. присутствует аттрибут xmlns).
parent:: Возвращает предка на один уровень назад.
preceding:: Возвращает множество обработанных элементов исключая множество предков.
preceding-sibling:: Возвращает множество элементов на том же уровне, предшествующих текущему.
self:: Возвращает текущий элемент.

Операции с путями

* - возвращает множество из всех элементов
@name  - возвращает множество атрибутов элемента когда name="*", лиБо возвращает значение указанного атрибута.
$name - возвращает значение параметра
[] - определяет дополнительное условие для выборки множества.
{} - говорит XSL-T процессору, что то, что написанно в фигурных скобках должно рассматриваться как XPath, а не как сторка.
/ - определяет уровень дерева
// - говорит о том, что возможно любое вложение уровней дерева


Логические операторы

or - условие "или"
and - условие "и"
= - условие "равно"
!= - условие "не равно"
< - условие "меньше"
> - условие "больше"
<= - условие "меньше либо равно"
>= - условие "больше либо равно"


Математические операторы

+ - сложение
- - вычитание
* - умножение
/ - деление
div - целочисленное деление
mod - остаток от деления


Функции XSL

Function: string text()
Возвращает текстовое содержимое элемента.

Function: node-set node()
Возвращает элемент.

Function: node-set document(object, node-set?)
Возвращает документ указанный в параметре object.

Function: node-set key(string, object)
Возвращает множество с указанным ключом, аналогично функции id для идентификаторов.

Function: string format-number(number, string, string?)
Форматирует число согласно образцу указанному во втором параметре, третий параметр указывает именованный формат числа, который должен быть учтён.

Function: node-set current()
Возвращает множество из одного элемента, который является текущим.
Обычно <xsl:value-of select="current()"/> равносильно укороченной записи <xsl:value-of select="."/>, но не при применении внутри выражений-фильтров. Например, выражение <xsl:apply-templates select="//glossary/item[@name=current()/@ref]"/> выбирает все элементы glossary/item, имеющие значение атрибута name равное значению атрибута ref текущего элемента. В отличии от выражения <xsl:apply-templates select="//glossary/item[@name=./@ref]"/>, которое означает то же, что и <xsl:apply-templates select="//glossary/item[@name=@ref]"/> и выбирает все элементы glossary/item, у которых значение атрибута name совпадает со значением атрибута ref.

Function: string unparsed-entity-uri(string)
Возвращает непроанализированный URI, если такового нет, возвращает пустую строку.

Function: string generate-id(node-set?)
Возвращает строку, являющуюся уникальным идентификатором.

Function: object system-property(string)
Возвращает системные переменные параметр может быть: Если используется неизвестный параметр, функция возвращает пустую строку.

Function: boolean element-available(string)
Проверяет доступен ли элемент или множество указанное в параметре. Параметр рассматривается как XPath.

Function: boolean function-available(string)
Проверяет доступна ли функция указанная в параметре. Параметр рассматривается как XPath.


Функции с множествами

Function: number last()
Возвращает номер последнего элемента в множестве

Function: number position()
Возвращает позицию элемента в множестве

Function: number count(node-set)
Возвращает количество элементов в node-set

Function: node-set id(object)
Находит элемент с уникальным идентификатором

Function: string local-name(node-set?)
Возвращает имя первого тэга в множестве, без пространства имён.

Function: string namespace-uri(node-set?)
Возвращает ссылку на url определяющий пространство имён.

Function: string name(node-set?)
Возвращает полное имя первого тэга в множестве.


вход <root xmlns:xdoc="www.company.com/xdoc" xmlns:xsmp="www.company.com/sample" > <xsmp:sample> <a/> <b/> </xsmp:sample> <xdoc:document> <chapter>a</chapter> <chapter>b</chapter> <chapter>c</chapter> <chapter>d</chapter> <chapter>e</chapter> </xdoc:document> </root>
<xsl:template match="root"> <xsl:value-of select="local-name(*)"/> <xsl:value-of select="name(*)"/> <xsl:value-of select="namespace-uri(*)"/> <xsl:value-of select="namespace-uri(*[2])"/> <xsl:value-of select="count(xdoc:document/*)"/> </xsl:template> <xsl:template match="xdoc:document"> <xsl:for-each select="chapter"> <xsl:value-of select="."/> <xsl:if test="not(position()=last())"> <xsl:text>, </xsl:text> </xsl:if> </xsl:for-each> </xsl:template>
выход sample
xsmp:sample
www.company.com/sample
www.company.com/xdoc
5
a, b, c, d, e


Строковые функции

Function: string string(object?)
Конвертирует объект в строку, для Например:
string(123.4567) вернёт "123.4567"
string(1 div 0) вернёт "Infinity"
string(true()) вернёт "true"
<somenode>some text</somenode>
string(somenode) вернёт "some text".

Function: string concat(string, string, string*)
Объеденяет две или более строк.
Например:
concat("First", "Second", "Third") вернёт "FirstSecondThird".


Function: boolean starts-with(string, string)
Возвращает истину если вторая строка входит в начало первой, иначе возвращает ложь.
Например:
starts-with("abcdefgh", "abc") вернёт true
starts-with("qwe", "qwerty") вернёт false.


Function: boolean contains(string, string)
Возвращает истину, если первая строка содержит вторую, иначе возвращает ложь.
Например:
contains("abcde", "") вернёт true
contains("abcde", "cde") вернёт true
contains("abcde", "123") вернёт false.


Function: string substring-before(string, string)
Если найдена вторая строка в первой, возвращает строку до первого вхождения второй строки.
Например:
substring-before("2000/08/21","/") вернёт 2000.


Function: string substring-after(string, string)
Если найдена вторая строка в первой, возвращает строку после первого вхождения второй строки.
Например:
substring-after("2000/08/21","/") вернёт 08/21.


Function: string substring(string, number, number?)
Возвращает строку вырезанную из строки начиная с указанного номера, и если указан второй номер - количество символов.
Например:
substring("123456",3,3) вернёт "345"
substring("123456", 3) вернёт "3456".


Function: number string-length(string?)
Возвращает длину строки.
Например:
string-length("some text") вернёт 9.




Function: string normalize-space(string?)
Убирает лишние и повторные пробелы, а так же управляющие символы, заменяя их пробелами.

Например:
$str = "some              
       
          text                    
"

normalize-space($str) вернёт "some text ".


Function: string translate(string, string, string)
Переводит символы первой строки которые встречаются во второй строке, на соответствующие символам второй строки символы из третьей строки. Примеры:
Например:
translate("bar","abc","ABC") вернет BAr
translate("-aaa--","abc-","ABC") вернет AAA.



Логические функции

Function: boolean boolean(object)
Приводит объект к логическому типу. Вернётся истина для: Function: boolean not(boolean)
Отрицание, возвращает истину если аргумент ложь и наоборот.

Function: boolean true()
Возвращает истину.

Function: boolean false()
Возвращает ложь.

Function: boolean lang(string)
Возвращает истину если у текущего тэга имеется атрибут xml:lang, либо родитель тэга имеет атрибут xml:lang и в нем указан совпадающий строке символ. Следующие тэги для вызова lang("ru") вернут истину:
<para xml:lang="ru"/>
<div xml:lang="ru"><para/></div>
<para xml:lang="RU"/>
<para xml:lang="ru-RU"/>



Функции с числами

Function: number number(object?)
Переводит объект в число, для Function: number sum(node-set)
Вернёт сумму множества, каждый тэг множества будет преобразован в строку и из него получено число.
Например:
<items>
    <item>10</item>
    <item>23</item>
    <item>7</item>
</items>

sum(items/item) вернёт 40,
<items>
    <item>abc</item>
    <item>23</item>
    <item>7</item>
</items>

sum(items/item) вернёт NaN.


Function: number floor(number)
Возвращает наибольшее целое число, не большее, чем аргумент.
Например:
floor(-0.8) вернёт -1
floor(3.6) вернёт 3.


Function: number ceiling(number)
Возвращает наименьшее целое число, не меньшее, чем аргумент.

Например:
ceiling(-3.8) вернёт -3
ceiling (8.6) вернёт 9.


Function: number round(number)
Округляет число.
Например:
round(-3.8) вернёт -4
round(8.2) вернёт 8
round(-3.5) вернёт -3
round(8.5) вернёт 9.














































text()
node()
document()
key()
format-number()
current()
unparsed-entity-uri()
generate-id()
system-property()
element-available()
function-available()
Множества >>
last()
position()
count()
id()
local-name()
namespace-uri()
name()
Строки
string()
concate()
starts-with()
contains()
substring-before()
substring-after()
substring()
string-length()
normalize-space()
translate()
Логика >>
boolean()
not()
true()
false()
lang()
Числа >>
number()
sum()
floor()
ceiling()
round()
Hosted by uCoz