XML 注释和“--”

问题描述 投票:0回答:6
xml comments
6个回答
70
投票

也许这对某人有帮助。我遇到了一个问题,我想注释掉 XML 中以 --:

开头的命令行参数
<arg line="-v --line-break 0" />  

像这样自然正常的方式

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

不起作用,但我发现,如果将

-
替换为 UTF-8 等效项
&#x002D;
&#45;
,它就可以工作并且可以在评论中容忍。

所以在我的例子中是字符串

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

已正确解析并且可以成为评论的一部分。

当然,它看起来有点难看,但如果有人想在他的 XML 中保留一个字符串 - 作为注释 - 我认为它仍然比没有好。


67
投票

来自标准文件:

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

[定义:注释可以出现在文档中除其他文档之外的任何位置。 标记;此外,它们可能出现在文档类型中 在语法允许的地方声明。他们不属于 文档的字符数据; XML 处理器可以(但不一定)做到这一点 应用程序可以检索评论文本。 对于 兼容性,字符串“--”(双连字符)不得出现在 注释。] 参数实体引用不得在 评论。


45
投票

这是 XML 中那些愚蠢的规则之一,因为它是 SGML 中的,而且人们不想破坏兼容性。为什么它在 SGML 中是任何人的猜测:可能是因为它在原始解析器中保存了三行代码。


35
投票

--
不允许与 SGML 兼容。来自关于 SGML 和 HTML

打开的标记声明之间不允许有空格 分隔符(“”)。一个常见的错误是包含 注释中的连字符(“---”)字符串。作者应该避免 在注释中放置两个或多个相邻的连字符。

因此,在 SGML 中,

<!
>
打开和关闭“标记声明”,
--
打开和关闭注释。


0
投票

这个问题迟早会影响任何喜欢在 XML 中使用注释来禁用他们不需要的内容的人。我连续几天都遇到了 Spring 上下文配置无法加载的重大问题,但没有任何详细解释原因。 问题是评论这样的内容块的习惯:

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

注释掉了,必须改成这样:

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

注释掉的块中的破折号不会被忽略,而是会扰乱整个文件的解析,无论它们放在哪里。


0
投票

取自我个人的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 --> ?>
© www.soinside.com 2019 - 2024. All rights reserved.