2009-05-16 14 views
5

Tengo un archivo, que está en formato XML (consiste solo en las etiquetas raíz de inicio y finalización, y los elementos secundarios de la raíz). Los elementos de texto de los niños contienen el símbolo comercial &. En XML, no está permitido tener este símbolo para que el documento sea válido, y cuando traté de procesar el archivo usando la API DOM en Java y un analizador XML, obtuve errores de análisis. Por lo tanto, he reemplazado & con &, y procesé el archivo con éxito: tuve que extraer los valores de los elementos de texto en diferentes archivos de texto sin formato.Caracteres especiales en archivos XML - procesamiento con DOM API

Cuando abrí estos archivos de texto recién creados, esperaba ver &, pero en su lugar había &. ¿Por qué es esto? He almacenado el texto en archivos de texto sin ninguna extensión (mi archivo original con el formato XML tampoco tenía extensión .xml), y tengo solo & en el texto del nuevo archivo, sin importar cómo abro el archivo: como txt o como archivo xml (estas son algunas de las opciones en mi editor XML). ¿Qué pasa exactamente? ¿Java (?) Convierte & en & automáticamente? O hay alguna codificación predeterminada? Bueno, & significa &, y supongo que hay alguna conversión automática "invisible", pero estoy confundido cuando y cómo sucede esto. Estos son ejemplos de mi archivo original y el archivo extraído que recibo después de que se procesó el archivo original con Java:

Este es mi archivo "negative.review" en formato XML:

<review> 
<review_text> 
I will not wear it as it is too big &amp; looks funny on me. 
</review_text> 
</review> 

Este es mi Extraídas archivo "negative_1":

I will not wear it as it is too big & looks funny on me. 

para mí es importante contar con los datos originales, ya que es (sin hacer ningún conversiones/reemplazos), así que pensé que tengo que procesar el archivo "negative_1" obtenidas conversión volver &amp; a &. Como ve, parece que no tengo que hacer esto. Pero no entiendo por qué :(.

gracias de antemano!

+1

Solo una observación: "consiste solo en las etiquetas raíz de inicio y finalización, y los hijos de la raíz". Esa es la definición misma de XML (solo hay un elemento raíz). – PhiLho

+0

http://stackoverflow.com/questions/4341145/how-to-deal-with-special-characters-in-urls-inside-xml – sandeepKumar

Respuesta

11

la razón es simple:. el archivo XML contiene realmente un carácter "&"

se acaba representado de forma diferente (es decir, es "escapado"), porque un verdadero.en sí mismo rompe archivos XML, como has visto. Lea la sección correspondiente en la especificación de XML 1.0: "2.4 Character Data and Markup". Son solo unas pocas líneas, pero explica el problema bastante bien.

XML es una representación de datos (!). No lo piense como un archivo de texto. Ejemplo:

Desea almacenar la cadena "17 < 20" en un archivo XML. Inicialmente, no puede, ya que el "<" está reservado como el corchete de la etiqueta de apertura.Así que esto no sería válida:

<xml>17 < 20</xml> 

Solución: Usted emplea carácter escape en el carácter especial/reservada, sólo por los medios de retención de la validez del archivo:

<xml>17 &lt; 20</xml> 

Para todos los efectos prácticos, la fragmento anterior contiene los siguientes datos (en representación JSON esta vez):

{ 
    "xml": "17 < 20" 
} 

es por esto que ves el verdadero "&" en su post-procesamiento. Se ha escapado de la misma manera, pero es lo que significa que se mantuvo igual todo el tiempo.

El ejemplo anterior también explica por qué el "&" debe tratarse especialmente: en sí mismo es parte del mecanismo de escape de XML. Marca el inicio de una secuencia de escape, como en "&lt;". Por lo tanto, se debe escapar (con "&amp;", como lo ha hecho).

+0

¡Respuesta fabuloso ... como de costumbre! +1 – Cerebrus

2

Cualquier analizador XML implícitamente traducir entidades tales como &amp;, &lt;, &gt;, en los caracteres correspondientes, como parte del proceso de análisis sintáctico el archivo

Cuestiones relacionadas