也许这对某人有帮助。我遇到了一个问题,我想注释掉 XML 中以 --:
开头的命令行参数<arg line="-v --line-break 0" />
像这样自然正常的方式
<!-- <arg line="-v --line-break 0" /> -->
不起作用,但我发现,如果将
-
替换为 UTF-8 等效项 -
或 -
,它就可以工作并且可以在评论中容忍。
所以在我的例子中是字符串
<arg line="-v --line-break 0" />
已正确解析并且可以成为评论的一部分。
当然,它看起来有点难看,但如果有人想在他的 XML 中保留一个字符串 - 作为注释 - 我认为它仍然比没有好。
来自标准文件:
http://www.w3.org/TR/REC-xml/#sec-comments
[定义:注释可以出现在文档中除其他文档之外的任何位置。 标记;此外,它们可能出现在文档类型中 在语法允许的地方声明。他们不属于 文档的字符数据; XML 处理器可以(但不一定)做到这一点 应用程序可以检索评论文本。 对于 兼容性,字符串“--”(双连字符)不得出现在 注释。] 参数实体引用不得在 评论。
这是 XML 中那些愚蠢的规则之一,因为它是 SGML 中的,而且人们不想破坏兼容性。为什么它在 SGML 中是任何人的猜测:可能是因为它在原始解析器中保存了三行代码。
--
不允许与 SGML 兼容。来自关于 SGML 和 HTML:
打开的标记声明之间不允许有空格 分隔符(“”)。一个常见的错误是包含 注释中的连字符(“---”)字符串。作者应该避免 在注释中放置两个或多个相邻的连字符。
因此,在 SGML 中,
<!
和 >
打开和关闭“标记声明”,--
打开和关闭注释。
这个问题迟早会影响任何喜欢在 XML 中使用注释来禁用他们不需要的内容的人。我连续几天都遇到了 Spring 上下文配置无法加载的重大问题,但没有任何详细解释原因。 问题是评论这样的内容块的习惯:
<value>ABC1</value> <!-- <value>ABC2</value> --> <value>ABC3</value>
注释掉了,必须改成这样:
<!--
<value>ABC1</value>
!-- <value>ABC2</value> --
<value>ABC3</value>
-->
注释掉的块中的破折号不会被忽略,而是会扰乱整个文件的解析,无论它们放在哪里。
取自我个人的KG: How2:XML - 注释块没有嵌套注释或注释中的“--”怪癖
您可以使用不存在的处理指令来包裹文本,例如:
<detail>
<?ignore
<band height="20">
<staticText>
<reportElement x="180" y="0" width="200" height="20"/>
<text><![CDATA[Hello World!]]></text>
</staticText> </band>
?>
</detail>
这避免了怪癖,因为不允许嵌套处理指令,并且“?>”结束处理指令(请参阅http://www.w3.org/TR/REC-xml/#sec-pi)
剪切和粘贴文档部分
<?ignore <Note Trick="true">to comment block with nested commented tags by using a nonexisting preprocessig instruction</Note> <!-- Explanation>force ignoring a block which does have nested commented sections<Explanation -->
<!-- Second nested comment, which would cause problems if we put an outer xml comment to this --> ?>