我试图以这种方式在xsl转换期间评论节点
Doesn't work:
<xsl:comment><xsl:copy-of select="."/></xsl:comment>
但我得到的是一个空注释,但删除注释元素我得到了正确的节点
This is correct:
<xsl:copy-of select="."/>
为什么copy-of元素在注释中不起作用?有解决方案还是我做错了什么?
答案 0 :(得分:0)
同意Ian这是重复的。
无论如何,你可能想要的是......
<xsl:comment><xsl:value-of select="."/></xsl:comment>
原因?注释不能包含子节点。它们是具有text属性(注释内容)的原子节点类型。
答案 1 :(得分:0)
没有一种直接的方法可以在注释中生成元素的文本表示。
这是一个简短的,使用内联扩展函数(在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年前写的一个开源产品,我不会在这里以任何方式做广告)
答案 2 :(得分:0)
您无法使用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>