如何在 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" />
<!- -->
在顶部评论中添加“->”,在底部评论中添加“-”。缺点是每次都必须编辑底部评论,这可能会更容易每次只在顶部输入<!--
,在底部输入-->
。
我还想提一下,其他评论者建议使用 XML 编辑器,该编辑器允许您右键单击和评论/取消注释 XML 块,这可能比花哨的查找/替换技巧更可取(它也将是一个很好的答案本身,但我从来没有使用过这样的工具。我只是想确保信息不会随着时间的推移而丢失)。我个人从来不需要处理足够多的 XML 来证明拥有比 Notepad++ 更高级的编辑器是合理的,所以这完全取决于你。
【讨论】:
不幸的是,这是错误的。 The spec 说,为了兼容性,字符串“--”(双连字符)不得出现在 cmets 中。 当然不合法。规范对此很清楚。 XML 解析器可能会遵循 Postel 定律并让您侥幸逃脱,但合规的格式良好检查器会对其进行标记。 正如@kojiro 所说,包含“--”的注释不是格式正确的XML。关于“为了兼容性”的短语仅仅是规范编辑器说明他们包含这个可怕规则的原因:这并不意味着如果你对兼容性不感兴趣,你可以忽略该规则。否决答案,因为它是错误的。 你可以写成<!-- ->
并且只需添加一个破折号而不是非 XML。
@RyanWH 继续做对您有用的事情,但您似乎依赖于您正在使用的 XML 解析器中的错误。就我个人而言,我使用一个 IDE (oXygen),它允许我选择一段 XML 文本,右键单击并要求将其注释掉。这似乎比你的技术容易得多。【参考方案3】:
与 html 或 javascript 块 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 中注释一行?的主要内容,如果未能解决你的问题,请参考以下文章