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

29

如何注释掉带有注释的XML部分?

以下方法不起作用。它仅注释掉stuff0

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

5个回答

12

我知道你不应该这么做,按照XML规范来说是不允许的。

话虽如此……我真的非常需要这样做,所以这里有个技巧。用一个未使用的处理指令将你想要注释的部分包围起来:

<some-tags />

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

<rest-of-my-tags />

你可以使用任何未被使用的处理指令。我选择了“comment”作为未使用的处理指令,因此我用<?comment开始了大注释,并以?>结尾。

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


这绝对是我最好的解决方案。 - Paul Wintz

8

--在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处理器可能会输出错误。根据规范,这取决于实现是否添加空格或引发错误。


7

根据其规范,XML不支持嵌套注释。


2

你有两个选择:

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

2

这里有另一种方法:你可以像在XML中支持的那样,使用嵌套注释:

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

然后只需在文本编辑器中使用 XML。实际上,您要输入到进程中的XML是您编写的一些简单程序的输出,该程序读取嵌套注释XML并输出未嵌套注释XML。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接