Escape del carácter de comillas dobles en XML

101

¿Hay un carácter de escape para una comilla doble en xml? Quiero escribir una etiqueta como:

<parameter name="Quote = " ">

pero si pongo ", significa que la cadena ha terminado. Necesito algo como esto (c ++):

printf("Quote = \" ");

¿Hay un carácter para escribir antes de la comilla doble para evitarlo?

ufukgun
fuente

Respuestas:

173

Prueba esto:

&quot;
Andrew Hare
fuente
118

Estos son los caracteres comunes que deben escaparse en XML, comenzando con comillas dobles:

  1. las comillas dobles ( ") se escapan a&quot;
  2. ampersand ( &) se escapa a&amp;
  3. las comillas simples ( ') se escapan a&apos;
  4. menos que ( <) se escapa a&lt;
  5. mayor que ( >) se escapa a&gt;
Alex Muriithi
fuente
3
Incorrecto; & apos; no es un carácter XML válido. Es un carácter HTML válido, que es SGML y un SUPERconjunto de XML.
Stefan Steiger
Si bien ese es un punto válido, la mayoría de los analizadores XML modernos con los que he trabajado lo aceptan como un carácter válido.
Dariusz G. Jagielski
& quot; Android no interpreta correctamente cuando la cadena está entre comillas dobles. En este caso, la respuesta E-max es la única que funciona.
Softlion
@StefanSteiger está en esta lista
OrangeDog
@Dariusz G. Jagielski: Si bien no tengo nada en contra de los analizadores XML modernos, si trabaja con XML en una base de datos (por ejemplo, ms / pg), verá que no todas las piezas de software utilizan analizadores XML modernos. Especialmente cuando se trata de un software complejo con décadas de antigüedad. Dicho esto, si todos usaran un analizador xml moderno, sería algo bueno. Sin embargo, si ese código está profundamente integrado en un software complejo más antiguo, será muy difícil reemplazarlo (conservando el 100% de compatibilidad con versiones anteriores). Las desventajas de C o de no usar la inyección de dependencia, por así decirlo.
Stefan Steiger
27

Otros han respondido en términos de cómo manejar el escape específico en este caso.

Una respuesta más amplia es no intentar hacerlo usted mismo. Utilice una API XML: hay muchas disponibles para casi todas las plataformas de programación modernas que existen.

Las API XML manejarán cosas como esta automáticamente, lo que hará que sea mucho más difícil equivocarse. A menos que esté escribiendo una API XML usted mismo, rara vez debería tener que preocuparse por detalles como este.

Jon Skeet
fuente
11
No puedo decir que esté de acuerdo. Parece una tontería pensar que deberíamos depender tanto de las API para abstraernos hasta el punto de que ni siquiera necesitamos entender cómo leer y escribir XML. La API XML probablemente no te ayudará mucho cuando le proporciones un documento con formato incorrecto y explote. Alguien tendrá que arreglar los datos para que se carguen.
Christopher Painter
@ChristopherPainter Dado el tamaño del estándar XML, dudo que haya mucha gente que realmente lo entienda. Ahora hay muchos que piensan que sí, pero en realidad no es así.
Reincorporación a Monica el
2
Bueno, tienes que empezar por algún lado. Por supuesto, en nuestra industria simplemente nos quejamos de que XML apesta y comenzamos de nuevo con algo más como JSON. Entonces el proceso se repite.
Christopher Painter
14

Respuesta nueva y mejorada a una pregunta antigua y frecuente ...

Cuándo escapar de las comillas dobles en XML

"Pueden aparecer comillas dobles ( ) sin escapar :

  • En contenido textual XML:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • En atributos XML delimitados por comillas simples ( '):

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

    Nota: cambiar a comillas simples ( ') tampoco requiere ningún escape:

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

Las comillas dobles ( ") deben ser de escape :

  • En atributos XML delimitados por comillas dobles:

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

Línea de fondo

Las comillas dobles ( ") deben escaparse como &quot;en XML solo en contextos muy limitados.

kjhughes
fuente
7

No, no hay un carácter de escape como tal, en su lugar puedes usar &quot;o incluso <![CDATA["]]>representar al "personaje.

Matt Howells
fuente
2

En C ++ puede utilizar la API ATL de EscapeXML. Esta es la forma correcta de manejar caracteres especiales ...

Neven
fuente
1

Puede intentar usar una barra invertida seguida de una "u" y luego el valor Unicode para el carácter, por ejemplo, el valor Unicode de las comillas dobles es

"-> U + 0022

Por lo tanto, si lo configurara como parte del texto en XML en Android, se vería así,

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

Esto produciría un texto en TextView aproximadamente algo como esto

"Mostrando comillas dobles"

Puede encontrar unicode de la mayoría de los símbolos y caracteres aquí www.unicode-table.com/en

E-max
fuente
Puede encontrar unicode de la mayoría de los símbolos y caracteres aquí unicode-table.com/en
E-max