XML comments and "--"

28,114

Solution 1

From the standards document:

http://www.w3.org/TR/REC-xml/#sec-comments

[Definition: Comments may appear anywhere in a document outside other markup; in addition, they may appear within the document type declaration at places allowed by the grammar. They are not part of the document's character data; an XML processor may, but need not, make it possible for an application to retrieve the text of comments. For compatibility, the string " -- " (double-hyphen) must not occur within comments.] Parameter entity references must not be recognized within comments.

Solution 2

Maybe it can be helpful for someone. I had a problem, that I wanted to comment out a command line parameter in XML that starts with --:

<arg line="-v --line-break 0" />  

so naturally normal way like this

<!-- <arg line="-v --line-break 0" /> -->

didn't work, but I found out, that if the - is replaced by it's UTF-8 equivalent &#x002D; or &#45; it works and can be tolerated inside comments.

So in my case the string

<arg line="-v &#45;&#45;line-break 0" />

is parsed correctly and can be part of comments.

Of course it looks a little ugly, but if someone want to keep a string with -- as comment in his XML - I think it's still better than nothing.

Solution 3

It's one of those stupid rules that's in XML because it was in SGML and people didn't want to break compatibility. Why it's in SGML is anyone's guess: probably because it saved three lines of code in the original parser.

Solution 4

-- is not allowed for compatibility with SGML. From On SGML and HTML:

White space is not permitted between the markup declaration open delimiter("<!") and the comment open delimiter ("--"), but is permitted between the comment close delimiter ("--") and the markup declaration close delimiter (">"). A common error is to include a string of hyphens ("---") within a comment. Authors should avoid putting two or more adjacent hyphens inside comments.

So in SGML <! and > open and close "markup declarations" and -- opens and closes comments.

Solution 5

This problem sooner or later will affect anyone who likes to use comments in XML to disable the content that they don't need. I had major issues for several days with Spring context configs failing to load, without any detail explanation why. Problem was a habit to comment blocks of content like this:

<value>ABC1</value>
<!-- <value>ABC2</value> -->
<value>ABC3</value>

commented out it has to be changed to this:

<!--
    <value>ABC1</value>
    !-- <value>ABC2</value> --
    <value>ABC3</value>
-->

The dashes in the commented out block instead of being ignored, were messing up the parsing of the whole file no matter where they are placed.

Share:
28,114

Related videos on Youtube

Vi.
Author by

Vi.

Updated on July 05, 2022

Comments

  • Vi.
    Vi. almost 2 years
    <!-- here is some comment --
                                ^
                                |
                        what can be here apart from '>'?
    

    XML seems not to like '--' inside comments. I read somewhere that '--' switchs some modes inside <! ... > thing, but <!-- -- -- --> (even number of --s) seem to be invalid too. If it is some historic feature, what is "pro" part of it? ("contra" part is inability to have -- in comments).

    What is the reason of complicating comment processing by not making just '-->' end of comment and allowing '--' inside?

  • Vi.
    Vi. almost 12 years
    So "pro" is compatibility with SGML.
  • asawyer
    asawyer almost 12 years
    I'd call it an engineering trade off.
  • drwatsoncode
    drwatsoncode about 10 years
    You can also use the escape sequence &#45; which is the ASCII escape version and is a bit shorter than the unicode version.
  • Waruyama
    Waruyama almost 6 years
    This should be changed IMO, because we now have css parameters, which start with a double hyphen and can be inside a style attribute in an SVG element. Commenting out these elements will break compatibility with the XML standard, only because of some legacy format that isn't around anymore.
  • Michael Kay
    Michael Kay almost 4 years
    Would that it could be changed! Unfortunately, as the painful experience with XML 1.1 shows, changing the spec is one thing; getting people to update parsers written 20 years ago is another. And having the world full of parsers that implement different versions of the standard is not going to help anyone.
  • Chris Bordeman
    Chris Bordeman over 3 years
    Heheh, everybody complains, you come up with an elegant and obvious solution. Bravo.
  • IS4
    IS4 about 3 years
    You can also only replace the second hyphen, i.e. replace -- with -&#45;.