【问题标题】:XML comments and "--"XML 注释和“--”
【发布时间】:2012-06-06 05:07:56
【问题描述】:
<!-- here is some comment --
                            ^
                            |
                    what can be here apart from '>'?

XML 似乎不喜欢 cmets 中的“--”。我在某处读到'--' 在&lt;! ... &gt; 事物中切换某些模式,但&lt;!-- -- -- --&gt;(偶数--s)似乎也无效。如果它是一些历史特征,它的“专业”部分是什么? (“对立”部分是无法在 cmets 中拥有 --)。

不只是以'-->'结束评论并允许'--'在里面,使评论处理复杂化的原因是什么?

【问题讨论】:

    标签: xml comments


    【解决方案1】:

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

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

    这样很自然的正常方式

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

    没用,但我发现,如果 - 被它的 UTF-8 等效 &amp;#x002D;&amp;#45; 替换,它可以工作并且可以在 cmets 中被容忍。

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

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

    被正确解析,可以成为 cmets 的一部分。

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

    【讨论】:

    • 你也可以使用转义序列&amp;#45;,它是ASCII转义版本,比unicode版本短一点。
    • 呵呵,大家都在抱怨,你想出了一个优雅而明显的解决方案。太棒了。
    • 也可以只替换第二个连字符,即将--替换为-&amp;#45;
    【解决方案2】:

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

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

    注释掉必须改成这样:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        -- 不允许与 SGML 兼容。来自On SGML and HTML

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

        所以在 SGML 中,&lt;!&gt; 打开和关闭“标记声明”,-- 打开和关闭 cmets。

        【讨论】:

          【解决方案5】:

          来自标准文档:

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

          [定义:注释可能出现在文档中其他位置之外的任何位置 标记;此外,它们可能出现在文档类型中 在语法允许的地方声明。它们不属于 文件的字符数据; XML 处理器可以,但不是必须,使它 应用程序可以检索 cmets 的文本。 compatibility,字符串“--”(双连字符)不能出现在 cmets.] 参数实体引用不能在内部被识别 厘米。

          【讨论】:

          • 所以“pro”与SGML兼容。
          • 我称之为工程权衡。
          • 这应该改变 IMO,因为我们现在有 css 参数,它以双连字符开头,可以在 SVG 元素的样式属性内。注释掉这些元素会破坏与 XML 标准的兼容性,只是因为某些旧格式不再存在。
          • 能不能改啊!不幸的是,正如 XML 1.1 的痛苦经历所表明的那样,更改规范是一回事。让人们更新 20 年前编写的解析器是另一回事。让世界上到处都是实现不同版本标准的解析器对任何人都没有帮助。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-09-19
          • 1970-01-01
          • 2012-12-08
          • 2018-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多