Подтвердить что ты не робот

Как комментировать XML-раздел с комментариями внутри?

Как закомментировать раздел XML, в котором есть комментарии?

Следующее не сработает. Это только комментирует stuff0:

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

Ответ 1

-- не допускается в комментариях 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 также может выдавать ошибку. Учитывая спецификацию, это до реализации, чтобы добавить пробел или вызвать ошибку.

Ответ 3

Ты не должен этого делать, я знаю. Я имею в виду, согласно спецификации XML, вы не должны. Хватит читать этот ответ. Это взломать! (ну... может быть, хороший).

Сказав, что... мне действительно нужно это плохо, так вот на хитрость. Окружите раздел, который вы хотите прокомментировать, неиспользованной инструкцией обработки:

<some-tags />

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

<rest-of-my-tags />

Вы можете использовать любую инструкцию по обработке, которая не используется. Я выбрал "комментарий" в качестве неиспользуемой инструкции по обработке, поэтому я начал большой комментарий с <?comment и закончил его с ?>.

Практически любое слово будет использоваться в качестве инструкции по обработке, поскольку в большинстве случаев оно не используется. Я имею в виду, вы когда-нибудь использовали?

Ответ 4

У вас есть два варианта:

  • Удалите его, а не комментируя - вы всегда можете вернуться после.
  • Сначала замените все экземпляры -- чем-то другим.

Ответ 5

Здесь другой подход: вы могли бы просто использовать вложенные комментарии, как если бы они поддерживались в XML:

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

Затем используйте этот XML только внутри текстового редактора. XML, который вы фактически загружаете в процесс, - это вывод какой-то простой программы, которую вы пишете, которая читает XML файл вложенных комментариев и выплевывает unsested-comment-XML.

Другой подобный трюк - использовать препроцессор компилятора C. Я сделал это много лет назад с компилятором Microsoft С++. Компилятор cl.exe фактически вызывал две отдельные программы: cl1.exe и cl2.exe. Cl1.exe является препроцессором. Таким образом, вы могли бы что-то вносить в эту вещь (XML, nmake-скрипты, что угодно), и она будет обрабатывать ее. Так что-то вроде этого будет работать:

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