xsl:value和应用模板到内部元素

时间:2014-02-05 08:03:53

标签: xml xslt xslt-1.0 value-of

如果我有这个,我该怎么办:

<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 个答案:

答案 0 :(得分:2)

毫无疑问,

xsl:value-of必须是空的。但你内心不需要任何东西。下面的样式表是一个标识转换,有两个例外,即替换e1e2的元素名称。

它在某种意义上是非常通用的,它取代了任何XML文档中的e1e2,并且保持其余部分不受影响。

<强>样式表

<?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>