<xsl:comment> issue </xsl:comment>

时间:2012-10-03 08:01:31

标签: xslt

  

可能重复:
  Output element in comments

我试图以这种方式在xsl转换期间评论节点

Doesn't work:
<xsl:comment><xsl:copy-of select="."/></xsl:comment>

但我得到的是一个空注释,但删除注释元素我得到了正确的节点

This is correct:
<xsl:copy-of select="."/>

为什么copy-of元素在注释中不起作用?有解决方案还是我做错了什么?

3 个答案:

答案 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">&lt;!--</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>