【问题标题】:How do I comment out an XML section that has comments inside?如何注释掉其中包含注释的 XML 部分?
【发布时间】:2012-01-24 14:29:09
【问题描述】:

如何注释掉包含 cmets 的 XML 部分?

以下将不起作用。它只会输出stuff0

<!--
stuff0
<!-- stuff1 -->
stuff2
<!-- stuff3 -->
stuff4
<!-- stuff5 -->
stuff6
-->

【问题讨论】:

标签: xml comments


【解决方案1】:

你不应该这样做,我知道。根据你不应该的 XML 规范。

话虽如此...我真的非常需要它,所以这就是诀窍。用未使用的处理指令围绕您要评论的部分:

<some-tags />

<?comment
  <!-- traditional comment 1 -->
  <badtag prop1="123">
    <!-- traditional comment 2 -->        
  </badtag>
  <!-- traditional comment 3 -->
?>

<rest-of-my-tags />

您可以使用任何未使用的处理指令。我选择了“评论”作为未使用的处理指令,所以我以&lt;?comment开始大评论,并以?&gt;结束。

几乎任何单词都可以作为处理指令,因为它们大部分时间都没有真正使用。我的意思是,你最后一次使用它是什么时候?

【讨论】:

  • 这是最好的解决方案,至少对我而言。
【解决方案2】:

-- 不允许在 XML cmets 中使用。您可以在两个- 之间添加一个空格。如果您想以编程方式执行此操作,XSLT 可能会为您完成这项工作。例如,以下 XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="2.0">
    <xsl:template match="/">
        <a>
            <xsl:comment select="'a -- b -- c'"/>
        </a>
    </xsl:template>
</xsl:stylesheet>

给出以下输出:

<a><!--a - - b - - c--></a>

但 XSLT 处理器也可能输出错误。根据规范,添加空格或引发错误取决于实现。

【讨论】:

    【解决方案3】:

    你没有。 XML 根据其specification 不支持嵌套 cmets。

    【讨论】:

      【解决方案4】:

      你有两个选择:

      1. 删除它,而不是注释掉 - 您可以随时恢复。
      2. 首先将所有 -- 实例替换为其他内容。

      【讨论】:

        【解决方案5】:

        这是另一种方法:您可以只使用嵌套的 cmets,就好像它在 XML 中受支持一样:

        <!-- Outer comment
          <SomeXML> ... </SomeXML>
          <!-- Inner comment 
            <SomeXML> ... </SomeXML>
          -->
        -->
        

        然后只在文本编辑器中使用 this XML。您实际输入到流程中的 XML 是您编写的某个简单程序的输出,该程序读取嵌套注释 XML 并吐出未嵌套注释 XML。

        另一个类似的技巧是使用 C 编译器的预处理器。几年前我用微软的 C++ 编译器做过这个。编译器 cl.exe 实际上调用了两个单独的程序 cl1.exe 和 cl2.exe。 Cl1.exe 是预处理器。因此,您可以将任何内容(XML、nmake 脚本等)输入其中,然后它会对其进行预处理。所以这样的事情会起作用:

        <SomeXML> ... </SomeXML>
        #ifdef PRODUCE_THIS
        <SomeMoreXML> ... </SomeMoreXML>
        #endif
        

        【讨论】:

          猜你喜欢
          • 2014-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-15
          • 1970-01-01
          • 2019-11-08
          • 2023-03-12
          • 2015-12-23
          相关资源
          最近更新 更多