Экранировать символ двойной кавычки в XML

101

Есть ли в xml escape-символ для двойной кавычки? Я хочу написать такой тег:

<parameter name="Quote = " ">

но если я поставлю ", это означает, что строка закончилась. Мне нужно что-то вроде этого (c ++):

printf("Quote = \" ");

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

ufukgun
источник

Ответы:

120

Вот общие символы, которые нужно экранировать в XML, начиная с двойных кавычек:

  1. двойные кавычки ( ") заменяются на&quot;
  2. амперсанд ( &) экранируется в&amp;
  3. одинарные кавычки ( ') заменяются на&apos;
  4. меньше чем ( <) экранируется до&lt;
  5. больше чем ( >) экранируется до&gt;
Алекс Муриити
источник
3
Неправильно; & апос; не является допустимым символом XML. Это допустимый символ HTML - SGML и SUPERset XML.
Stefan Steiger
Хотя это верный момент, большинство современных анализаторов XML, с которыми я работал, принимают его как допустимый символ.
Дариуш Г. Ягельски
& quot; неправильно интерпретируется Android, если строка заключена в двойные кавычки. В этом случае работает только E-max.
Softlion 01
@StefanSteiger, он в этом списке
OrangeDog
@Dariusz G. Jagielski: Хотя я ничего не имею против современных XML-парсеров - если вы работаете с XML в базе данных (например, ms / pg), вы увидите, что не все программы используют современные XML-анализаторы. Особенно, когда это сложное программное обеспечение, созданное десятилетиями. Тем не менее, если бы все использовали современный синтаксический анализатор xml, это было бы хорошо. Однако, если этот код глубоко интегрирован в более старое сложное программное обеспечение, его будет очень сложно заменить (при сохранении 100% обратной совместимости). Недостатки C или, так сказать, отказа от внедрения зависимостей.
Stefan Steiger
27

Другие ответили на вопрос, как справиться с конкретным побегом в этом случае.

Более широкий ответ - не пытаться сделать это самостоятельно. Используйте XML API - их достаточно практически для каждой существующей современной платформы программирования.

XML API будет обрабатывать подобные вещи автоматически, что значительно усложняет ошибку. Если вы сами не пишете XML API, вам редко придется беспокоиться о подобных деталях.

Джон Скит
источник
11
Не могу сказать, что согласен. Кажется глупым думать, что мы должны настолько полагаться на API, чтобы абстрагироваться от нас до такой степени, что нам даже не нужно понимать, как читать и писать XML. XML API, вероятно, не очень поможет вам, если вы скармливаете ему искаженный документ, и он взрывается. Кто-то должен будет исправить данные, чтобы они загрузились.
Кристофер Пейнтер
@ChristopherPainter Учитывая размер стандарта XML, я сомневаюсь, что очень много людей действительно его понимают. Сейчас многие думают, что это так, но на самом деле это не так.
Unslander Monica
2
Что ж, тебе нужно с чего-то начать. Конечно, в нашей отрасли мы просто жалуемся, что XML - отстой, и начинаем с чего-то еще, например, JSON. Затем процесс повторяется.
Кристофер Пейнтер,
15

Новый, улучшенный ответ на старый, часто задаваемый вопрос ...

Когда избегать двойных кавычек в XML

Двойная кавычка ( ") может появляться без экранирования :

  • В текстовом содержимом XML:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • В атрибутах XML, разделенных одинарными кавычками ( '):

    <NoEscapeNeeded name='Pete "Maverick" Mitchell'/>

    Примечание: переход на одинарные кавычки ( ') также не требует экранирования:

    <NoEscapeNeeded name="Pete 'Maverick' Mitchell"/>

Двойная кавычка ( ") должна быть экранирована :

  • В атрибутах XML, разделенных двойными кавычками:

    <EscapeNeeded name="Pete &quot;Maverick&quot; Mitchell"/>

Нижняя граница

Двойные кавычки ( ") следует экранировать, как &quot;в XML, только в очень ограниченном контексте.

Kjhughes
источник
7

Нет, как такового escape-символа нет, вместо этого вы можете использовать &quot;или даже <![CDATA["]]>представлять "символ.

Мэтт Хауэллс
источник
2

В C ++ вы можете использовать EscapeXML ATL API. Это правильный способ обработки специальных символов ...

Невен
источник
1

Вы можете попробовать использовать обратную косую черту, за которой следует «u», а затем значение Unicode для символа, например значение Unicode двойной кавычки

"-> U + 0022

Поэтому, если бы вы устанавливали его как часть текста в XML в Android, это выглядело бы примерно так:

<TextView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:text=" \u0022 Showing double quotes \u0022 "/>

Это создаст текст в TextView примерно так

«Показаны двойные кавычки»

Вы можете найти юникод большинства символов и символов здесь www.unicode-table.com/en

E-max
источник
Вы можете найти юникод большинства символов и символов здесь unicode-table.com/en
E-max