2

可能重复:
评论中的输出元素

我正在尝试以这种方式在 xsl 转换期间注释节点

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

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

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

为什么元素的副本在评论一中不起作用?有解决方案还是我做错了什么?

4

3 回答 3

0

同意伊恩,这是重复的。

无论如何,您可能想要的是...

<xsl:comment><xsl:value-of select="."/></xsl:comment>

原因?评论不能包含子节点。它们是具有文本属性(评论内容)的原子节点类型。

于 2012-10-03T08:16:03.943 回答
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 年前编写的开源产品,但我不是在这里以任何方式做广告)

于 2012-10-03T12:12:15.703 回答
0

你不能使用xsl:comment和使用xsl:textDOE。

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>
于 2012-10-03T15:17:59.463 回答