<TD>128.4 You should switch to kilometers.</TD>

   </TR>

  </TABLE>

 </BODY>

</HTML>

Помимо работы с наборами узлов, числами и строками, можно работать и с логическими значениями (true/false).

Логические значения XPath

Логические (Boolean) выражения XPath вычисляются либо в истину (true), либо в ложь (false), и обычно они используются только в предикатах. Для чисел ноль принимается за ложь, другие значения — за истину. Пустая строка, '', также считается ложью, все остальные строки — истиной.

Для генерации логических результатов true/false в XPath можно применять ряд логических операций, как мы видели в обзоре в главе 4:

• != означает «не равно»;

• < означает «меньше, чем» (в документах XML используйте &lt;);

• <= означает «меньше или равно» (в документах XML используйте &lt;=);

• = означает «равно» (программисты на С, С++, Java и JavaScript, обратите внимание: эта операция пишется как один знак =, а не два);

• > означает «больше, чем»;

• >= означает «больше или равно».

Для связи логических выражений логическими операциями And и Or используются ключевые слова and и or, слово not инвертирует логический смысл выражения, как в следующем примере, где я выбираю все элементы <PLANET>, кроме первого и последнего:

<xsl:template match='PLANET[not(position() = 1) and not(position() = last())]'>

 <xsl:value-of select='.'/>

</xsl:template>

Следующий пример уже встречался нам в главе 5, он использует логическую операцию not и операции = и !=:

<xsl:template match='PLANET'>

 <xsl:if test='NAME[not(text())]'>

  <xsl:message terminate='yes'>

   Each planet must have a name!

  </xsl:message>

 </xsl:if>

 <xsl:value-of select='NAME'/>

  <xsl:choose>

   <xsl:when test='position()!=last()'>, </xsl:when>

   <xsl:when test='position()=last()-1'>and </xsl:when>

   <xsl:otherwise>.</xsl:otherwise>

  </xsl:choose>

</xsl:template>

Кроме того, имеется функция true, всегда возвращающая истину, и функция false, всегда возвращающая ложь. Есть также функция lang, при помощи которой вы можете проверить язык, установленный в атрибуте документа xml:lang: эта функция возвращает истину, если язык, который вы передали в эту функцию, такой же, как и установленный в документе язык.

Как вы видели, существуют все виды выражений XPath, в том числе возвращающие узлы, числа, строки и логические значения. Наиболее важным типом выражений XPath является путь расположения; для создания путей расположена XPath первоначально и задумывался, поэтому оставшаяся часть главы будет посвящена работе с ними.

Создание путей расположения XPath

Вы уже знакомы со взглядом на документы с позиции XPath; например, в XPath определено семь типов узлов документа:

• Корневой узел. Самое начало документа. Этот узел представляет в XPath весь документ;

• Узлы элементов. Представляют элементы в деревьях XPath, обозначенные открывающим и соответственным закрывающим тегами или единственным пустым тегом элемента;

• Узлы атрибутов. Значение атрибута после раскрытия ссылок на сущность и отбрасывания окружающих символов-разделителей;

• Узлы комментариев. Текст комментариев, не включая <!-- и -->;

• Узлы пространств имен. Объявление пространства имен. В XPath узел пространства имен добавляется во все элементы для каждого активного пространства имен, включая пространства имен по умолчанию;

• Узлы инструкций обработки. Содержат текст инструкции обработки, не включая <? и ?>;

• Текстовые узлы. Текст PCDATA. Текстовые узлы по умолчанию в XPath нормализованы, поэтому расположенные рядом текстовые узлы немедленно объединяются.

Для задания узла или набора узлов в XPath служит путь расположения (location path). Путь расположения, в свою очередь, состоит из одного или более шагов расположения (location step), также называемых просто шагами, разделенных / или //. Если путь расположения начинается с /, он называется абсолютным путем расположения, поскольку путь задается от корневого узла; иначе путь называется относительным, начинаясь от контекстного узла.

Шаги расположения, строительные блоки путей расположения, во многом похожи на образцы шага (step patterns), формирующие образцы выбора, которые мы видели в главе 4. В частности, шаг расположения образован из оси (axis), условия узла (node test) и предикатов (которых может и не быть) по такому образцу: axis::nodetest[predicate]. Например, в выражении ancestor::NAME [position() > 100], ancestor — это имя оси, NAME — условие узла и [position() >100] — предикат. (Предикат сам содержит законченное выражение XPath, обычно возвращающее логическое значение.) Пути расположения создаются при помощи одного или более шагов расположения, таких как /descendant::PLANET/child::NAME, который выбирает все элементы <NAME> с родителем <PLANET>.

Шаги XPath похожи на образцы шага из главы 4, так как общий их вид одинаков — axis::nodetest[predicate] — но в данном случае нужно рассмотреть значительно больше материала. Например, осей теперь тринадцать, а не две.

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату