Фильтрующие выражения

We use cookies. Read the Privacy and Cookie Policy

Фильтрующие выражения

Фильтрующие выражения выполняют две основные задачи:

? выбор из вычисленного множества узлов некоторого подмножества в соответствии с заданными логическими критериями-предикатами;

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

Примеры

Предположим, что переменной nodeset присвоено некоторое множество узлов. Задачи типа "выбрать каждый второй узел этого множества" или "выбрать первый узел этого множества" или вообще, любой выбор узлов этого множества в соответствии с некоторыми заданными логическими критериями являются задачами фильтрации. Выражение $nodeset[1] выберет первый в порядке просмотра документа узел множества $nodeset; выражение $nodeset[position() mod 2 = 0] выберет четные узлы множества $nodeset. Здесь "[1]" и "[position() mod 2 = 0]" являются предикатами — логическими выражениями, которые фильтруют множество.

Фильтрующие выражения также позволяют вычислять пути выборки относительно узлов фильтруемых множеств.

Пример

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

<data>

 <string>

  <value>a</value>

  <value>b</value>

  <value>c</value>

 </string>

 <number>

  <value>1</value>

  <value>2</value>

  <value>3</value>

 </number>

</data>

Следующее преобразование демонстрирует использование относительных путей выборки в фильтрующих выражениях:

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

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="data">

  <values>

   <xsl:copy-of select="(string | number)/value"/>

  </values>

 </xsl:template>

</xsl:stylesheet>

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

<values>

 <value>a</value>

 <value>b</value>

 <value>c</value>

 <value>1</value>

 <value>2</value>

 <value>3</value>

</values>

Элемент values выходящего документа содержит множество, являющееся результатом вычисления выражения (string | number)/value. Это будет множество элементов value, принадлежащих элементам string или number.