如何注释掉里面有注释的XML部分?

时间:2011-12-20 16:27:20

标签: xml comments

如何注释掉里面有评论的XML部分?

以下内容不起作用,只会注明stuff0

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

5 个答案:

答案 0 :(得分:7)

你没有。根据{{​​3}}的XML不支持嵌套注释。

答案 1 :(得分:6)

XML注释中不允许使用

--。您可以在两个-之间添加空格。如果你想以编程方式进行,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处理器也可能输出错误。根据规范,由实现来添加空格或引发错误。

答案 2 :(得分:4)

我知道,你不应该这样做。我的意思是,根据XML规范,你不应该这样做。停止阅读这个答案。这是一个黑客! (也许是一个好的)。

话虽如此...... 我真的非常需要,所以这里是trick。使用未使用的处理指令

围绕要评论的部分
<some-tags />

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

<rest-of-my-tags />

您可以使用任何未使用的处理指令。我选择“评论”作为未使用的处理指令,因此我使用<?comment开始了大评论,并以?>结束。

几乎任何单词都可以作为处理指令,因为大多数时候它们并没有真正使用。我的意思是,你多久以前使用过它?

答案 3 :(得分:2)

您有两种选择:

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

答案 4 :(得分:2)

以下是另一种方法:您可以使用嵌套注释,就好像XML支持它一样:

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

然后只在文本编辑器中使用 XML。您实际输入流程的XML是您编写的一些简单程序的输出,该程序读取嵌套注释XML并吐出unnested-comment-XML。

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

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