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

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

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

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

12 ответов

Решение

Когда ваш XML содержит &, это приведет к тексту &,

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

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

Я пробовал & amp; но это не разрешено

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

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

CDATA теги?

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

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

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

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

Я пробовал &, но это не сработало. Основываясь на ответе Вим тен Бринка, я попробовал и это сработало.

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

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

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

&amp;amp;

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

Какие символы мне нужно экранировать в документах XML?

<xsl:text disable-output-escaping="yes">&amp;&nbsp;</xsl:text> сделает свое дело.

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

Связанная проблема заключается в том, как кодировать содержимое элемента XML, если оно содержит амперсанд - если XML является частью URI, переданного с помощью действия GET. (Оставляя в стороне мудрость такого API - это было то, с чем мне пришлось иметь дело сегодня.) Я попробовал все, что упомянуто выше, и единственное, что на самом деле работало, было %26amp; %26 было необходимо для URL-кодирования первого символа в XML-кодировке для амперсанда. 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>

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

Другие вопросы по тегам