XML comments and "--"
XmlCommentsXml Problem Overview
<!-- 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?
Xml Solutions
Solution 1 - Xml
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 - Xml
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 -
or -
it works and can be tolerated inside comments.
So in my case the string
<arg line="-v --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 - Xml
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 - Xml
--
is not allowed for compatibility with SGML. From [On SGML and HTML][1]:
> 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.
[1]: http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4
Solution 5 - Xml
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:
>
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.