Как избежать амперсандов в XML, чтобы они отображались как сущности в HTML?

у меня есть текст XML, который я хочу отобразить на HTML-странице. Этот текст содержит амперсанд, который я хочу отобразить в его представлении сущности:&.

Как избежать этого амперсанда в исходном XML? Я пытался!--0-->, но это декодируется как фактический символ амперсанда (&), которая составляет неверно в HTML.

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

12 ответов


когда ваш XML содержит & этот текст &.

когда вы используете это в HTML, это будет отображаться как &.


по состоянию на §2.4 спецификации XML 1.0, вы должны иметь возможность использовать &.

я попробовал, но это не допускается.

вы уверены, что это не другой вопрос? XML явно определяет это как способ избежать амперсандов.


на & символ сам по себе является escape-символом в XML, поэтому решение состоит в том, чтобы объединить его и десятичный эквивалент Юникода для & таким образом, гарантируя, что нет ошибок синтаксического анализа XML. То есть заменить символ & с &.


теги CDATA?

     <![CDATA[
       This is some text with ampersands & other funny characters. >>
     ]]>

&amp; должно работать просто отлично, Википедия имеет список предопределенных сущностей в XML.


в моем случае мне пришлось изменить его на %26.

мне нужно было бежать & в URL-адресе. Так что &amp; у меня не получилось. The urlencode изменения функции & to %26. Таким образом, ни XML, ни механизм URL браузера не жаловались на URL.


Я пробовал &amp, но это не сработало. Основываясь на ответе Wim ten Brink, я попробовал &amp, и это сработало.

один из моих коллег-разработчиков предложил мне использовать & , и это сработало независимо от того, сколько раз он может быть отображен.


&amp; - это способ представления амперсанда в большинстве разделов XML-документа.

если вы хотите, чтобы XML отображался в HTML, вам нужно сначала создать правильно закодированный XML (который включает в себя изменение & to &amp;) и затем используйте это для создания правильно закодированного HTML (который включает в себя снова изменение & to &amp;). Это приводит к:

&amp;amp;

для более подробного объяснения кодировки XML, см.:

какие символы мне нужно избежать в XML-документах?


<xsl:text disable-output-escaping="yes">&amp;&nbsp;</xsl:text> будет делать трюк.


Как насчет использования unicode \u0026? Работает для меня в моих XML-файлах android. Если возникнут проблемы, дайте мне знать.


связанная проблема заключается в том, как кодировать содержимое элемента XML, когда такое содержимое содержит амперсанд -- если XML является частью URI, отправленного с действием GET. (Оставляя в стороне мудрость такого API-это было то, с чем мне пришлось иметь дело сегодня.) Я пробовал все, что упоминалось выше, и единственное, что действительно сработало, было %26amp; на %26 был необходим для URL-кодирования первого символа в XML-кодировке для амперсанда. The amp; после %26 был необходим, потому что XML часть URI загружалась на сервер XML-документа. Таким образом, в этом забавном сценарии необходимо было сшить обе методологии кодирования вместе.


рассмотрим, если ваш XML выглядит как ниже.

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES<>'GCF'
  <Query>
</Employees>

вы не можете использовать <> непосредственно, как он выдает ошибку. В этом случае, вы можете использовать &#60;&#62; взамен этого.

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES &#60;&#62; 'GCF'
  <Query>
</Employees>

Нажмите здесь чтобы увидеть все коды.