How do I comment out an XML section that has comments inside?

-- is not allowed in XML comments. You can add a space between the two -. If you want to do that programmatically, an XSLT may do the job for you. For example, the following XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="2.0">
    <xsl:template match="/">
        <a>
            <xsl:comment select="'a -- b -- c'"/>
        </a>
    </xsl:template>
</xsl:stylesheet>

Gives the following output:

<a><!--a - - b - - c--></a>

But the XSLT processor may also output an error. Given the specification, it's up to the implementation to add a space or raise an error.


You don't. XML as per its specification doesn't support nested comments.


You shouldn't do it, I know. Per the XML specification you aren't supposed to.

Having said that... I really needed it badly, so here's the trick. Surround the section you want to comment with an unused processing instruction:

<some-tags />

<?comment
  <!-- traditional comment 1 -->
  <badtag prop1="123">
    <!-- traditional comment 2 -->        
  </badtag>
  <!-- traditional comment 3 -->
?>

<rest-of-my-tags />

You can use any processing instruction that's not in use. I chose "comment" as the unused processing instruction, so I started the big comment with <?comment and ended it with ?>.

Pretty much any word will do as a processing instruction, since they aren't really used most of the time. I mean, when was the last time you used one?


You have two options:

  1. Delete it, rather than commenting out - you can always revert afterwards.
  2. Replace all instances of -- with something else first.

Tags:

Xml

Comments