如何在XML中注释一行?


123

这只是一个验证,不要错过。

XML是否有行注释?因此,没有一个更紧密的联系,例如编译器使用的“ //”。

我看到了如何注释掉XML标签块?和其他一些讨论。

这种注释对于注释掉一行而不会打扰它附近的位置将是实用的。


2
XML的设计假设是,编辑器之类的工具通常会进行自动换行,因此行尾很脆弱。如果仅在出现注释时必须保留行尾,那将是一个坏主意。
Michael Kay

2
当然,编辑器只换行显示。我从未知道要在文件本身中随意添加硬性换行符。没有专栏评论是对地狱的滋扰。
约翰·怀特

Answers:


147

不,没有办法用XML注释行,并且注释在换行符处自动结束。

XML只有一个注释定义

'<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

XML禁止--在注释中维护与SGML的兼容性


一种解决方法是使用行注释(//)并运行脚本以在使用前去除这些注释(可以是单步构建过程的一部分)。它为使用注释提供了更为方便的方法。(我已将此技术与WiX源(Windows的安装程序工具)一起使用。构建安装程序还需要执行许多其他步骤,因此,这只是添加到构建脚本/过程中的又一个步骤。)
Peter Mortensen

20

就像其他人所说的那样,没有办法在XML中合法地对一行进行注释,将多行注释掉,但是,有一些方法可以使注释XML的段变得更加容易。

看下面的示例,如果在第一行中添加“>”,则XmlTag将不加注释。删除“>”,它再次被注释掉。这是我所见过的最简单的方法,可以快速注释/取消注释XML而又不会破坏事物。

<!-- --
<XmlTag variable="0" />
<!-- -->

额外的好处是,您仅可以操作顶部的注释,而底部的注释则可以永远坐在那里。这破坏了与SGML的兼容性,并且某些XML解析器会拒绝它。只要这不是XML中的永久性工具,并且您的解析器接受它,那实际上不是问题。

Stack Overflow和Notepad ++的语法突出显示器将其视为多行注释,C ++的Boost库将其视为多行注释,到目前为止,我发现唯一会中断的解析器是.NET中的解析器,尤其是C#。因此,在使用它之前,请确保首先测试您的工具,IDE,库,语言等是否接受它。

如果您关心SGML兼容性,只需使用以下命令即可:

<!-- -
<XmlTag variable="0" />
<!- -->

在顶部注释中添加“->”,在底部注释中添加“-”。缺点是每次都必须编辑底部的注释,这可能使<!--每次在顶部和-->底部键入都更容易。

我还想提到其他评论者建议使用XML编辑器,该编辑器允许您右键单击XML并注释/取消注释XML块,这可能比花哨的查找/替换技巧更可取(它本身也可以提供很好的答案,但我从未使用过此类工具。我只是想确保信息不会随着时间的流逝而丢失。我个人从来不需要处理XML足以证明拥有比Notepad ++更好的编辑器是合理的,因此这完全取决于您。


3
不幸的是,这是错误的。规范说,为了兼容,字符串“-”(双连字符)一定不能出现在注释中。
kojiro 2013年

2
当然是不合法的。规范对此很明确。XML解析器可能会遵循Postel的定律,但您可以摆脱它,但是符合标准的格式检查器会对其进行标记。
2013年

4
正如@kojiro所说,包含“-”的注释不是格式正确的XML。关于“为了兼容性”的短语只是规范编辑者说明了他们包括此可怕规则的原因:这并不意味着如果您对兼容性不感兴趣,则可以忽略该规则。否决答案是错误的。
Michael Kay

10
您可以编写它<!-- ->,而只需添加破折号而不是使用非XML。
kojiro 2013年

3
@RyanWH继续为您工作,但是您似乎取决于所使用的XML解析器中的错误。就个人而言,我使用的IDE(oXygen)允许我选择一段XML文本,右键单击并要求将其注释掉。这似乎比您的技术容易得多。
迈克尔·凯

12

它与HTML或JavaScript块注释相同:

<!-- The to-be-commented XML block goes here. -->

5

不是正统的,但是有时候对我有用;将您的评论设置为另一个属性:

<node usefulAttr="foo" comment="Your comment here..."/>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.