В чем разница между <copy-of> и <apply-templates>? - PullRequest
8 голосов
/ 07 декабря 2009

Когда я должен использовать <copy-of> вместо <apply-templates>?

Какова их уникальная роль? В большинстве случаев замена <apply-templates> на <copy-of> выдает странный вывод. Почему это так?

Ответы [ 2 ]

13 голосов
/ 07 декабря 2009
  • xsl:copy-of - точная копия соответствующего входного XML-элемента. Обработка xslt не выполняется, и выходные данные этого элемента будут точно такими же, как и входные.

  • xsl:apply-templates заставляет механизм xslt обрабатывать шаблоны, соответствующие выбранным элементам. xsl:apply-templates - это то, что дает xslt возможность переопределения, поскольку шаблоны, которые вы создаете с сопоставлением элементов, могут иметь разные приоритеты, и шаблон с наивысшим приоритетом будет выполнен.

Введите:

<a>
   <b>asdf</b>
   <b title="asdf">asdf</b>
</a>

Xslt 1:

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

Вывод XML 1:

<b>asdf</b>
<b title="asdf">asdf</b>

Xslt 2:

<xsl:stylesheet ... >
   <xsl:template match="a">
        <xsl:apply-templates select="b" />
   </xsl:template>

   <xsl:template match="b" priority="0">
        <b><xsl:value-of select="." /></b>
        <c><xsl:value-of select="." /></c>
   </xsl:template>

   <xsl:template match="b[@title='asdf']" priority="1">
       <b title="{@title}"><xsl:value-of select="@title" /></b>
   </xsl:template>
</xsl:stylesheet>

Вывод XML 2:

<b>asdf</b>
<c>asdf</c>
<b title="asdf">asdf</b>
7 голосов
/ 07 декабря 2009
copy-of 

просто вернет вам дамп XML в предоставленном наборе узлов

apply-templates

с другой стороны будет применять любые шаблоны, применимые к переданному им набору узлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...