Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

count($nodeset) = count($node | $nodeset)

которое будет истинным тогда и только тогда, когда

$node
полностью принадлежит
$nodeset
.

Этот метод позволяет реализовать в XSLT другие операции над множествами — пересечение, разность и симметрическую разность. Подробное описание этих операций приводится в главе 11.

В XSLT также нет оператора, который позволил бы проверить тождественность двух узлов. Например, если каждое из множеств

$A
и
$B
содержит по одному узлу, при помощи простого оператора равенства (
$A = $B
) мы не сможем проверить, один и тот же это узел или два разных узла с одинаковыми текстовыми значениями.

Для того чтобы корректно выполнить такое сравнение, можно использовать функцию

generate-id
, которая для каждого из узлов дерева генерирует уникальный строковый идентификатор, присущий только этому узлу и никакому другому, причем для одних и тех же узлов идентификаторы всегда будут генерироваться одинаковыми. Таким образом, для проверки тождественности двух узлов, содержащихся во множествах
$A
и
$B
, будет достаточно сравнить их уникальные идентификаторы:

generate-id($А) = generate-id($В)

Множества узлов могут быть преобразованы в булевые значения, числа и строки.

При преобразовании в булевый тип пустое множество узлов преобразуется в

false
, а непустое — в
true
. Например, чтобы проверить, есть ли у текущего узла атрибут
value
, можно написать:

<xsl:if test="@value">

 <xsl:text>Value attribute exists here.</xsl:text>

</xsl:if>

Выражение

@value
возвратит непустое множество, состоящее из узла атрибута
value
, если он есть в текущем элементе, или пустое множество, если такого атрибута нет. В первом случае логическим эквивалентом будет
true
, во втором —
false
, то есть текст будет выведен только в случае наличия атрибута
value
.

При преобразовании множества узлов в строку, результатом будет строковое значение первого в порядке просмотра узла множества.

Пример
Листинг 3.6. Входящий документ

<catalog>

 <item>A</item>

 <item>B</item>

 <item>C</item>

 <item>D</item>

</catalog>

Листинг 3.7. Преобразование

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="text"/>

 <xsl:template match="/">

<xsl:value-of select="catalog/item"/>

 </xsl:template>

</xsl:stylesheet>

Результат:

A

При преобразовании множества узлов в число, множество сначала приводится к строке, а затем строка преобразуется в численное значение. Проще говоря, численным значением множества узлов будет численное значение первого узла в порядке просмотра документа.

Пример
Листинг 3.8. Входящий документ

<numbers>

 <integer>1</integer>

 <real>1.5</real>

 <integer>2</integer>

 <real>2.6</real>

 <integer>3</integer>

 <real>3.7</real>

</numbers>

Листинг 3.9. Преобразование

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="text"/>

 <xsl:template match="/">

<xsl:value-of select="numbers/real — numbers/integer"/>

 </xsl:template>

</xsl:stylesheet>

Результат:

0.5

  • Читать дальше
  • 1
  • ...
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: