使用XSLT转换XML时保持注释

时间:2014-02-11 15:09:43

标签: xslt

在应用XSLT时,是否可以在XML中保留注释?

示例(来源):

<rootNode>
  <!-- My comment --><childElement>5</childElement>
</rootNode>

转换后的样本结果应为:

<newRoot>
  <!-- My comment --><newChildElement>5</newChildElement>
</newRoot>

你会如何编写样式表?

2 个答案:

答案 0 :(得分:4)

在您的示例中,这不是正确的XML注释语法,但您可以使用

保留所有节点
<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

然后为要转换的节点添加模板

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

我的建议假设样本为

<rootNode>
  <!-- My comment--><childElement>5</childElement>
</rootNode>

,结果为

<rootNode>
  <!-- My comment--><newChildElement>5</newChildElement>
</rootNode>

如果childElement在评论中,则更难。

答案 1 :(得分:1)

如果我理解正确的问题,那就非常简单了:

<xsl:template match="comment()">
  <xsl:copy/>
</xsl:template>