xsl-list
[Top] [All Lists]

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

2010-08-18 06:09:29
pankaj(_dot_)c(_at_)thomsondigital(_dot_)com 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/

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--