可能重复:
评论中的输出元素
我正在尝试以这种方式在 xsl 转换期间注释节点
Doesn't work:
<xsl:comment><xsl:copy-of select="."/></xsl:comment>
但我得到的是一个空评论,但删除评论元素我得到了正确的节点
This is correct:
<xsl:copy-of select="."/>
为什么元素的副本在评论一中不起作用?有解决方案还是我做错了什么?
同意伊恩,这是重复的。
无论如何,您可能想要的是...
<xsl:comment><xsl:value-of select="."/></xsl:comment>
原因?评论不能包含子节点。它们是具有文本属性(评论内容)的原子节点类型。
没有一种直接的方法可以在评论中生成元素的文本表示。
这是一个简短的,使用内联扩展函数(在 C# 中):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:my="my:my" exclude-result-prefixes="msxsl my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<xsl:comment>
<xsl:value-of select="my:stringize(someElement)"/>
</xsl:comment>
</xsl:template>
<msxsl:script language="c#" implements-prefix="my">
public string stringize(XPathNavigator doc)
{
return doc.OuterXml;
}
</msxsl:script>
</xsl:stylesheet>
在以下 XML 文档上应用此转换时(使用 .NET XslCompiledTransform XSLT 处理器):
<t>
<someElement>someValue</someElement>
</t>
产生了想要的正确结果:
<!--<someElement>someValue</someElement>-->
在纯 XSLT 中有不同的方法来做同样的事情- 例如,请参阅XPath Visualizer的 XSLT 代码,以获得将 XML 文档表示为 Html 的美观表示(我 12 年前编写的开源产品,但我不是在这里以任何方式做广告)
你不能使用xsl:comment
和使用xsl:text
DOE。
XML 输入
<doc>
<foo>
<bar attr="test"/>
</foo>
</doc>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="doc">
<xsl:copy>
<xsl:text disable-output-escaping="yes"><!--</xsl:text>
<xsl:copy-of select="foo"/>
<xsl:text disable-output-escaping="yes">--></xsl:text>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML 输出
<doc><!--<foo>
<bar attr="test"/>
</foo>--></doc>