Нужно ли заменять двойную / одинарную кавычку в тексте XML?

пожалуйста, исправьте мою терминологию здесь, если она выключена:

5 символов замены для XML являются:

  • & ( & )
  • > ( > )
  • " (")
  • ' (')

все ли эти замены должны происходить в тексте элемента? Или только текст атрибута? (терминологическая поправка?)

например, является ли это допустимым XML?

<myelement>x && y</myelement>
<myelement>And I quote, "no"</myelement>

&gt; и &lt; кажется очевидным чтобы заменить в этом контексте, но я не понимаю, являются ли правила замены глобальными для всего XML-документа или они применяются по-разному к различным частям документа (например, разделы cdata применяют разные правила).

предположение: это недопустимый XML:

<myelement field="no & allowed here"/>
<myelement field="no <> allowed here"/>

котировки очевидны разделители атрибуты и явные разделители текста элемент.

1 ответов


в содержимом элемента вам нужно только бежать & и <; вам никогда не нужно избегать одиночных или двойных кавычек, и вам нужно бежать > только если он появляется как часть последовательности ]]> (многие люди заменяют его безоговорочно, потому что это проще).

в содержимом атрибута вам нужно только избежать & и < и ' или ", в зависимости от того, какой из них использовался в качестве разделителя атрибутов.

лиц, начиная с & не распознаются в комментариях или разделах CDATA или в именах элементов или атрибутов, поэтому специальные символы не должны экранироваться в этих контекстах.