如何在 XML 中注释一行?

Posted

技术标签:

【中文标题】如何在 XML 中注释一行?【英文标题】:How can I comment a single line in XML? 【发布时间】:2013-06-24 00:12:00 【问题描述】:

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

XML 中是否有行注释?所以,没有更接近的,比如编译器使用的“//”。

我看到了 How do I comment out a block of tags in XML? 和其他几个讨论。

这种类型的注释可以很实用地注释掉一行,而不会打扰它更靠近的地方。

【问题讨论】:

XML 的设计假设是编辑器等工具通常会执行自动换行,因此行尾很脆弱。如果只在 cmets 的情况下必须保留行尾,那将是一个坏主意。 当然编辑器只为 display 换行。我从来不知道硬换行被任意添加到文件本身。没有行注释真是令人讨厌。 【参考方案1】:

不,没有办法在 XML 中注释一行并让注释在换行时自动结束。

XML 只有one definition for a comment:

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

XML 禁止 cmets 中的 -- 维护 compatibility with SGML。

【讨论】:

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

正如其他人所说,没有办法在 XML 中执行单行注释合法 来定义多行,但是,有办法进行注释XML 段更容易。

看下面的例子,如果你在第一行添加“>”,XmlTag 将被取消注释。删除“>”并再次注释掉。这是我见过的最简单的方法,可以快速注释/取消注释 XML 而不会破坏任何东西。

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

额外的好处是您只能操纵顶部评论,而底部评论可以永远坐在那里。这破坏了与SGML 的兼容性,一些 XML 解析器会对此感到厌烦。只要这不是您的 XML 中的永久固定装置,并且您的解析器接受它,它就不是真正的问题。

*** 和 Notepad++'s 语法高亮将其视为多行注释,C++ 的 Boost 库将其视为多行注释,到目前为止我发现的唯一一个中断的解析器是.NET,特别是 C#。因此,请务必在使用之前先测试您的工具、IDE、库、语言等是否接受它。

如果您关心 SGML 兼容性,只需使用它即可:

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

在顶部评论中添加“->”,在底部评论中添加“-”。缺点是每次都必须编辑底部评论,这可能会更容易每次只在顶部输入&lt;!--,在底部输入--&gt;

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

【讨论】:

不幸的是,这是错误的。 The spec 说,为了兼容性,字符串“--”(双连字符)不得出现在 cmets 中。 当然不合法。规范对此很清楚。 XML 解析器可能会遵循 Postel 定律并让您侥幸逃脱,但合规的格式良好检查器会对其进行标记。 正如@kojiro 所说,包含“--”的注释不是格式正确的XML。关于“为了兼容性”的短语仅仅是规范编辑器说明他们包含这个可怕规则的原因:这并不意味着如果你对兼容性不感兴趣,你可以忽略该规则。否决答案,因为它是错误的。 你可以写成 &lt;!-- -&gt; 并且只需添加一个破折号而不是非 XML。 @RyanWH 继续做对您有用的事情,但您似乎依赖于您正在使用的 XML 解析器中的错误。就我个人而言,我使用一个 IDE (oXygen),它允许我选择一段 XML 文本,右键单击并要求将其注释掉。这似乎比你的技术容易得多。【参考方案3】:

htmljavascript 块 cmets 相同:

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

Extensible Markup Language (XML) 1.0 仅包括块 cmets。

【讨论】:

以上是关于如何在 XML 中注释一行?的主要内容,如果未能解决你的问题,请参考以下文章

停止在 XML 文档注释中自动添加“///”。 (C#)

VS.NET 2005(C#) 如何注释

LaTeX 可不可以注释掉一行的某一部分

单行上的 Visual Studio XML 摘要注释

在 lxml 中解析 XML 时如何不加载注释

如何在发布期间包含相关项目 XML 注释文件?