使用XSLT 1.0我想注释掉某些XML元素并替换其他XML元素,同时保持XML格式良好。
例如,以下XML文档
renderMyRouterForPath
应转换为
<doc>
<e1>foo</e1>
<e2>bar</e2>
</doc>
我正在使用以下XSL转换和<doc>
<!--<e1>foo</e1>-->
<e3>foobar</e3>
<e4>foobar</e4>
</doc>
进行测试:
xsltproc
但我得到的是:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:output indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="e1">
<xsl:text disable-output-escaping="yes"><!--</xsl:text> <!--*-->
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
<xsl:text disable-output-escaping="yes">--></xsl:text> <!--*-->
</xsl:template>
<xsl:template match="e2">
<e3>foobar</e3><e4>foobar</e4>
</xsl:template>
</xsl:stylesheet>
问题似乎是由我的转换中标有'*'的行引起的;更具体地说,从插入<doc><!--<e1>foo</e1>--><e3>foobar</e3><e4>foobar</e4></doc>
和<!--
开始。当我删除这两个元素时,结果按预期缩进。
有没有办法在注释中包含元素,同时仍然保持输出文档的格式良好?
答案 0 :(得分:1)
尝试输出带元素序列化的注释,如
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="http://lenzconsulting.com/xml-to-string/xml-to-string.xsl"/>
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="e1">
<xsl:comment>
<xsl:call-template name="xml-to-string"></xsl:call-template>
</xsl:comment>
</xsl:template>
<xsl:template match="e2">
<e3>foobar</e3><e4>foobar</e4>
</xsl:template>
</xsl:stylesheet>
为您提供更好的结果。