Як я можу уникнути подвійних лапок у значеннях атрибутів XML?


138

З наступних випробувань

<tag attr="\"">
<tag attr="<![CDATA["]]>">
<tag attr='"'>

Тільки останній працює для аналізатора XML, який я тут використовую. Чи є альтернатива?


1
&quot;є відповідь; ось пояснення .
kjhughes

Відповіді:


223

Можна використовувати &quot;


3
Явне і довше узгодження імен є кращим, ніж абревіатури або скорочене, коли називають змінні, функції, атрибути тощо; Я будь-коли буду чіткіше ставитися до стислості - це моя непрохана думка.
Данило Соколовський

1
Я згоден з Даніелем. Стислість може врятувати вас на секунду набравши текст, але тоді людям доведеться витратити 10 хвилин, намагаючись зрозуміти, що відбувається.
NL3294

@Daniel Sokolowski: Про кого ви двоє звертаєтесь? Чи є якийсь пропущений контекст (наприклад, видалені коментарі)?
Пітер Мортенсен

Повинен бути @PeterMortensen, я зараз забуваю, це було майже 7 років тому :)
Даніель Соколовський

54

З специфікації XML :

Щоб дозволити значенням атрибутів містити як одиничні, так і подвійні лапки, символ апострофа або одноцитата (') може бути представлений як "& a", а символ подвійного цитування (") -" "".


17

Символ подвійної цитати ( ") можна уникнути як &quot;, але ось решта історії ...

У цьому контексті потрібно уникати символу подвійної цитати :

  • У атрибутах XML, розділених подвійними лапками:

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

У більшості контекстів не слід уникати символу подвійної цитати :

  • У текстовому вмісті XML:

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

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

    Аналогічно, ( ') не вимагає пропуску, якщо ( ") використовується для розділювачів значення атрибута:

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

Дивитися також


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.