Xslt <;xsl:comment>;问题

Xslt <;xsl:comment>;问题,xslt,Xslt,可能重复: 我试图在xsl转换期间以这种方式注释节点 Doesn't work: <xsl:comment><xsl:copy-of select="."/></xsl:comment> 不起作用: 但是我得到的是一个空的注释,但是删除注释元素我得到了正确的节点 This is correct: <xsl:copy-of select="."/> 这是正确的: 为什么元素的副本在注释中不起作用?是否有解决方案,或者我做错了什么?同意Ian

可能重复:

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

Doesn't work:
<xsl:comment><xsl:copy-of select="."/></xsl:comment>
不起作用:
但是我得到的是一个空的注释,但是删除注释元素我得到了正确的节点

This is correct:
<xsl:copy-of select="."/>
这是正确的:

为什么元素的副本在注释中不起作用?是否有解决方案,或者我做错了什么?

同意Ian的意见这是重复的

无论如何,你可能想要的是

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


原因是什么?注释不能包含子节点。它们是一种具有文本属性(注释内容)的原子节点类型。

同意Ian的意见,这是重复的

无论如何,你可能想要的是

<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>

公共字符串字符串字符串化(XPathNavigator文档)
{
返回doc.OuterXml;
}
在以下XML文档上应用此转换时(使用.NET XslCompiledTransform XSLT处理器)

<t>
 <someElement>someValue</someElement>
</t>
<!--<someElement>someValue</someElement>-->

一些价值
生成所需的正确结果

<t>
 <someElement>someValue</someElement>
</t>
<!--<someElement>someValue</someElement>-->


在纯XSLT中有不同的方法可以做到这一点——例如,请参阅的XSLT代码,以获得XML文档作为Html的漂亮表示(我12年前编写的一个开源产品,我在这里没有任何宣传)没有一种直接的方法来生成注释中元素的文本表示形式

这里有一个简短的例子,使用内联扩展函数(在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>

公共字符串字符串字符串化(XPathNavigator文档)
{
返回doc.OuterXml;
}
在以下XML文档上应用此转换时(使用.NET XslCompiledTransform XSLT处理器)

<t>
 <someElement>someValue</someElement>
</t>
<!--<someElement>someValue</someElement>-->

一些价值
生成所需的正确结果

<t>
 <someElement>someValue</someElement>
</t>
<!--<someElement>someValue</someElement>-->


在纯XSLT中有不同的方法可以做到这一点——例如,请参阅的XSLT代码,以获得XML文档作为Html的漂亮表示(我12年前编写的一个开源产品,我在这里没有任何宣传)

您不能对DOE使用
xsl:comment
xsl:text

XML输入

<doc>
    <foo>
        <bar attr="test"/>
    </foo>
</doc>
<doc><!--<foo>
      <bar attr="test"/>
   </foo>--></doc>

XSLT1.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>
<doc><!--<foo>
      <bar attr="test"/>
   </foo>--></doc>

您不能对DOE使用
xsl:comment
xsl:text

XML输入

<doc>
    <foo>
        <bar attr="test"/>
    </foo>
</doc>
<doc><!--<foo>
      <bar attr="test"/>
   </foo>--></doc>

XSLT1.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>
<doc><!--<foo>
      <bar attr="test"/>
   </foo>--></doc>


xsl:comment内部的xsl:value应该与xsl:copy of完全相同-它提供所选节点的字符串值。根据给出的证据推测,字符串值为空,他们想要的是标记的某种表示形式。xsl:comment内部的xsl:value应该与xsl:copy of完全相同-它为您提供所选节点的字符串值。根据给出的证据推测,字符串值为空,他们想要的是标记的某种表示形式。