Подтвердить что ты не робот

XSL, который возвращает XML без изменений

Я ищу фрагмент XSL, который просто возвращает XML без изменений. Это звучит тривиально, но я не могу найти пример в Интернете. Любая помощь там?

4b9b3361

Ответ 1

Чтобы скопировать полный XML-документ, необходимо иметь шаблон, соответствующий корню. Это может быть:

      <xsl:template match="/">

или

      <xsl:template match="node()">

Тогда простое копирование текущего node (корня node) достаточно:

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

Итак, одно такое полное преобразование:

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

Хотя это, вероятно, самое простое такое преобразование, программисты XSLT используют другой, широко известный как identity transformation или identity rule

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Резонанс, тождественное преобразование считается одним из самых фундаментальных шаблонов проектирования XSLT и должно быть так широко использовано, состоит в том, что, переопределяя это правило шаблона другими, более конкретными шаблонами, можно очень легко выполнить множество операций, которые иначе будет сложно. Примерами являются удаление определенного (набора) элементов (элементов), которые имеют конкретное имя или удовлетворяют некоторым другим условиям, переименование отдельных элементов, изменение пространства имен определенных элементов, создание новых детей или братьев и сестер отдельных элементов,... и т.д.

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

Ответ 2

Это обычная проблема, и ответ называется преобразование идентичности. Следующий шаблон скопирует существующий XML правильно. Затем вы добавляете дополнительные шаблоны для изменения поведения (например, удаление определенных элементов, переименование элементов или атрибутов и т.д.).

<xsl:template match="@*|node()">
   <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
</xsl:template>

Ответ 3

Как насчет:

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

Может быть, есть еще более простой способ?