Уникнути подвійного символу цитати в XML


101

Чи є символ втечі для подвійної цитати в xml? Я хочу написати тег на зразок:

<parameter name="Quote = " ">

але якщо я поставлю ", то це означає, що рядок закінчився. Мені потрібно щось подібне (c ++):

printf("Quote = \" ");

Чи є персонаж написати перед подвійною цитатою, щоб уникнути цього?





Коротка відповідь: &quot; Решта історії ...
kjhughes

Відповіді:



119

Ось загальні символи, які потрібно уникнути в XML, починаючи з подвійних лапок:

  1. подвійні лапки ( ") уникають до&quot;
  2. ampersand ( &) втече в&amp;
  3. одиничні цитати ( ') не використовуються&apos;
  4. менше, ніж ( <) уникне&lt;
  5. більше, ніж ( >) уникає&gt;

3
Неправильно; & apos; не є дійсним символом XML. Це дійсний HTML-символ - це SGML та SUPER-набір XML.
Стефан Штайгер

Хоча це дійсна точка, більшість сучасних парсерів XML, з якими я працював, приймають її як дійсний символ.
Даріуш Г. Ягельський

& quot; не правильно трактується Android, коли рядок оточений подвійними лапки. У цьому випадку E-max відповідь працює тільки.
Softlion

@StefanSteiger це в цьому списку
OrangeDog

@Dariusz G. Jagielski: Хоча я не маю нічого проти сучасних парсерів XML - якщо ви працюєте з XML в базі даних (наприклад, ms / pg), ви побачите, що не кожен програмний продукт використовує сучасні аналізатори XML. Особливо, коли це складне десятиліття програмного забезпечення. Це означає, що якби кожен користувався сучасним аналізатором xml, це було б добре. Однак, якщо цей код глибоко інтегрований у старіші складні програми, його замінити стає дуже важко (зберігаючи 100% зворотну сумісність). Недоліки С або не використання ін'єкції залежності, так би мовити.
Стефан Штайгер

27

Інші відповіли з точки зору того, як впоратися з конкретними втечами в цьому випадку.

Ширша відповідь - не намагатися зробити це самостійно. Використовуйте XML API - доступно безліч майже для кожної сучасної платформи програмування.

API XML буде обробляти такі речі автоматично для вас, що значно ускладнює помилку. Якщо ви самі не пишете API XML, вам рідко потрібно турбуватися про такі деталі.


11
Я не можу сказати, що я згоден. Думає, що думати, що нам слід так покладатися на API, щоб абстрагувати нас до того, що нам навіть не потрібно розуміти, як читати та писати XML. Tha XML API, ймовірно, не допоможе вам багато, коли ви подаєте йому неправильно сформований документ, і він підірветься. Хтось повинен виправити дані, щоб завантажити його.
Крістофер Художник

@ChristopherPainter Враховуючи розмір стандарту XML, я сумніваюся, що дуже багато людей насправді це розуміють. Зараз є багато хто думає, що вони це роблять, але насправді цього не роблять.
Відновіть Моніку

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, лише у дуже обмежених контекстах.


7

Ні, немає символу втечі як такого, натомість ви можете використовувати &quot;або навіть <![CDATA["]]>зобразити його ".



2

У C ++ ви можете використовувати API EscapeXML ATL. Це правильний спосіб обробки спеціальних знаків ...


1

Ви можете спробувати скористатися зворотною косою рисою, що супроводжується символом "u", а потім значенням 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/uk


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