Книга: XSLT

Элемент

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

Элемент <xsl:copy-of> позволяет осуществлять глубокое копирование узлов, при котором копируется не только узел, но и все его атрибуты и потомки. У этого элемента единственный атрибут:

• select (обязательный). Узел или набор копируемых узлов. Этот элемент пуст и не имеет содержимого.

Ниже приведен пример работы этого элемента; в этом случае я заменил в листинге 3.10 элемент <xsl:for-each> элементом <xsl:copy-of>, который явно выбирает для копирования все атрибуты контекстного элемента.

Листинг 3.11. Применение <copy-of>

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml"/>
 <xsl:template match="*">
  <xsl:copy>
   <xsl:copy-of select="@*"/>
   <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

Этот код работает так же, как и предыдущий пример, копируя все элементы и атрибуты. С другой стороны, можно вообще обойтись без каких-либо изменений в листинге 3.10, — я могу просто использовать <xsl:copy-of> для того, чтобы скопировать весь документ, выбрав корневой узел и скопировав всех его потомков:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml"/>
 <xsl:template match="/">
  <xsl:copy-of select="*"/>
 </xsl:template>
</xsl:stylesheet>

При помощи <xsl:copy-of> можно также копировать конкретные узлы и их потомков вместо того, чтобы задавать подстановку *. Например, следующее правило копирует все элементы <MASS> и их потомков:

<xsl:template match="MASS">
 <xsl:copy-of select="."/>
</xsl:template>

По этой причине я могу заменить элемент <MASS> на элемент <DAY>:

<xsl:template match="MASS">
 <xsl:copy-of select="DAY"/>
</xsl:template>

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


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