web-dev-qa-db-ja.com

内部にコメントがあるXMLセクションをコメントアウトするにはどうすればよいですか?

内部にコメントがあるXMLセクションをコメントアウトするにはどうすればよいですか?

以下は機能しません。コメントアウトするだけですstuff0

<!--
stuff0
<!-- stuff1 -->
stuff2
<!-- stuff3 -->
stuff4
<!-- stuff5 -->
stuff6
-->
26
dov.amir

--はXMLコメントでは許可されていません。 2つの間にスペースを追加できます-。プログラムでそれを行う場合は、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プロセッサもエラーを出力する場合があります。仕様を考えると、スペースを追加するかエラーを発生させるかは実装次第です。

6

あなたはしません。 specification によるXMLは、ネストされたコメントをサポートしていません。

7
Ondrej Tucny

あなたはそれをすべきではありません、私は知っています。つまり、XML仕様によれば、あなたはそうするべきではありません。この答えを読むのをやめなさい。それはハックです! (まあ...多分良いもの)。

そうは言っても...私は本当にそれをひどく必要としていたので、ここに トリック があります。コメントするセクションを未使用の処理命令で囲みます。

<some-tags />

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

<rest-of-my-tags />

使用されていない処理命令を使用できます。未使用の処理命令として「コメント」を選択したので、大きなコメントを<?commentで開始し、?>で終了しました。

ほとんどの場合、実際には使用されないため、ほとんどすべてのWordが処理命令として機能します。つまり、何か使ったことがありますか?

5
The Impaler

次の2つのオプションがあります。

  1. コメントアウトするのではなく、削除してください。後でいつでも元に戻すことができます。
  2. 最初に、--のすべてのインスタンスを別のものに置き換えます。
2
Paul Butcher

別のアプローチは次のとおりです。XMLでサポートされているかのようにネストされたコメントを使用できます。

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

次に、テキストエディタ内でthis XMLのみを使用します。実際にプロセスにフィードするXMLは、nested-comment-XMLを読み取り、unnested-comment-XMLを吐き出す単純なプログラムの出力です。

もう1つの同様のトリックは、Cコンパイラのプリプロセッサを使用することです。私はこの数年前にMicrosoftのC++コンパイラーを使用しました。コンパイラーcl.exeは、実際には2つの別個のプログラムcl1.exeとcl2.exeを呼び出しました。 Cl1.exeはプリプロセッサです。そのため、XMLやnmakeスクリプトなど、何でもフィードでき、それを前処理します。したがって、このようなものが機能します:

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