Re: [xsl] commenting an XML element [XSLT 1.0][xsltproc]

Subject: Re: [xsl] commenting an XML element [XSLT 1.0][xsltproc]
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Wed, 18 Aug 2010 13:09:13 +0200
pankaj.c@xxxxxxxxxxxxxxxxxx wrote:
Hello all,

I am trying to comment one of the empty element (<spec/>) in my xml tree but seems I am missing something.


My stylesheet look something below:


<xsl:template match="spec">
        <xsl:comment>
           <xsl:apply-templates select="self::*" mode="comment"/>
     </xsl:comment>
</xsl:template>

   <xsl:template match="*" mode="comment">
        <xsl:value-of select="'&lt;'"/>
            <xsl:value-of select="name()"/>
        <xsl:value-of select="'&gt;'"/>
            <xsl:apply-templates select="@*|node()" mode="comment" />
        <xsl:value-of select="'&lt;/'"/>
            <xsl:value-of select="name()"/>
        <xsl:value-of select="'&gt;'"/>
    </xsl:template>

    <xsl:template match="text()" mode="comment">
        <xsl:value-of select="."/>
    </xsl:template>

    <xsl:template match="@*" mode="comment">
        <xsl:value-of select="name()"/>
        <xsl:text>="</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text>" </xsl:text>
    </xsl:template>

This is what I get using xsltproc (MAC)

Error:
element text
misplaced text element

Any ideas please.

PS: I do have my identity transform defined in stylesheet.

I don't see any problem with that code, unless a spec element contains "--". But in that case (XML input being


<root>
  <spec foo="bar"><baz/></spec>
  <spec>--</spec>
</root>

stylesheet being

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  version="1.0">

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

<xsl:template match="spec">
        <xsl:comment>
           <xsl:apply-templates select="self::*" mode="comment"/>
     </xsl:comment>
</xsl:template>

   <xsl:template match="*" mode="comment">
        <xsl:value-of select="'&lt;'"/>
            <xsl:value-of select="name()"/>
        <xsl:value-of select="'&gt;'"/>
            <xsl:apply-templates select="@*|node()" mode="comment" />
        <xsl:value-of select="'&lt;/'"/>
            <xsl:value-of select="name()"/>
        <xsl:value-of select="'&gt;'"/>
    </xsl:template>

    <xsl:template match="text()" mode="comment">
        <xsl:value-of select="."/>
    </xsl:template>

    <xsl:template match="@*" mode="comment">
        <xsl:value-of select="name()"/>
        <xsl:text>="</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text>" </xsl:text>
    </xsl:template>

</xsl:stylesheet>

) xsltproc (on Windows) gives a clear error message:

runtime error: file test2010081801Xsl.xml line 12 element comment
xsl:comment : '--' or ending '-' not allowed in comment

So try a different XSLT processor if you have a problem with xsltproc to see whether another processor succeeds.

If you still have problems then consider to post complete samples allowing us to reproduce.

--

	Martin Honnen
	http://msmvps.com/blogs/martin_honnen/

Current Thread