xsl: значение и применить шаблон к внутреннему элементу

Что я могу сделать, если у меня есть это:

<e1>t1<e2>t2</e2></e1>

и я хочу перевести с XSLT в:

<c1>t1<c2>t2</c2></c1>

Я пробовал с:

<xsl:template match="e1">
  <c1>
     <xsl:value-of select=".">
        <xsl:apply-templates/>
     </xsl:value-of>
  </c1>
</xsl:template>
<xsl:template match="e2">
  <c2>
     <xsl:value-of select="."/>
  </c2>
</xsl:template>

Но я получаю ошибку, так как значение должно быть пустым.

1 ответ

Решение

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

Это довольно общий в том смысле, что он заменяет e1 а также e2 в любом XML-документе и оставит все остальное нетронутым.

стилей

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:output method="xml" indent="yes"/>

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

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

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

</xsl:stylesheet>

Выход

<?xml version="1.0" encoding="UTF-8"?>
<c1>t1<c2>t2</c2></c1>
Другие вопросы по тегам