Книга: Технология XSLT

Элемент xsl:copy-of

Элемент xsl:copy-of

Синтаксис элемента несложен:

<xsl:copy-of
 select="выражение"/>

Использование элемента xsl:copy-of полностью аналогично использованию элемента xsl:value-of за тем исключением, что xsl:copy-of при выводе значения выражения преобразует его к строке не во всех случаях. Поведение xsl:copy-of зависит от того, какой тип данных возвращает выражение.

? Если результат вычисления имеет булевый, числовой или строковый тип, то xsl:copy-of выводит его в виде текстового узла. В этом случае поведение xsl:copy-of абсолютно не отличается от поведения элемента xsl:value-of.

? Если результатом вычисления выражения является множество узлов (node-set), то xsl:copy-of копирует в выходящий документ все узлы в порядке просмотра документа вместе с их потомками.

? Если результатом вычисления является результирующий фрагмент дерева, то он копируется в выходящий документ в неизмененном виде.

Рассмотрим пример.

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

<values>
 <boolean>false</boolean>
 <string>text</string>
 <number>3.14</number>
 <node-set>
  <item>10</item>
  <item>20</item>
  <item>30</item>
 </node-set>
 <tree>
  text
  <root>
   text
   <branch>
    text
    <leaf/>
    <leaf/>
   </branch>
   <leaf/>
  </root>
 </tree>
</values>

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

<xsl:stylesheet
 version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:variable name="boolean" select="values/boolean='true'"/>
  <xsl:variable name="string" select="string(values/string)"/>
  <xsl:variable name="number" select="number(values/number)"/>
  <xsl:variable name="node-set" select="values/node-set/*"/>
  <xsl:variable name="tree">
   <xsl:copy-of select="values/tree/*"/>
  </xsl:variable>
  <xsl:text>&#10;Value-of boolean:</xsl:text>
  <xsl:value-of select="$boolean"/>
  <xsl:text>&#10;Copy-of boolean:</xsl:text>
  <xsl:copy-of select="$boolean"/>
  <xsl:text>&#10;Value-of string:</xsl:text>
  <xsl:value-of select="$string"/>
  <xsl:text>&#10;Copy-of string:</xsl:text>
  <xsl:copy-of select="$string"/>
  <xsl:text>&#10;Value-of number:</xsl:text>
  <xsl:value-of select="$number"/>
  <xsl:text>&#10;Copy-of number:</xsl:text>
  <xsl:copy-of select="$number"/>
  <xsl:text>&#10;Value-of node-set:</xsl:text>
  <xsl:value-of select="$node-set"/>
  <xsl:text>&#10;Copy-of node-set:</xsl:text>
  <xsl:copy-of select="$node-set"/>
  <xsl:text>&#10;Value-of tree:</xsl:text>
  <xsl:value-of select="$tree"/>
  <xsl:text>&#10;Copy-of tree:</xsl:text>
  <xsl:copy-of select="$tree"/>
 </xsl:template>
</xsl:stylesheet>

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

Value-of boolean:false
Copy-of boolean:false
Value-of string:text
Copy-of string:text
Value-of number:3.14
Copy-of number:3.14
Value-of node-set:10
Copy-of node-set:<item>10</item><item>20</item><item>30</item>
Value-of tree:
  text
   text
Copy-of tree:<root>
  text
  <branch>
   text
   <leaf/>
   <leaf/>
  </branch>
  <leaf/>
 </root>

Оглавление книги

Оглавление статьи/книги

Генерация: 1.196. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз