2010-03-08 27 views
5

He leído un archivo XML y convertido en el objeto NSXMLDocument. Pero, debido a la presencia de "<" en el contenido de cadena de un nodo, se ha convertido en "& lt". Entonces, cuando lo escribo como documento xml en un archivo, tiene el carácter "& lt" en él.convert & lt to <xml document

¿Cómo puedo escribir en el archivo como archivo XML ordinario en el que "& lt" será reemplazado por "<".

Gracias y Saludos, Lenin

Respuesta

4

Cuando aparece el carácter < en un nodo de texto, se serializará como &lt; cuando escriba su xml en un archivo.

Cuando más tarde lea ese archivo con un analizador xml, el nodo de texto contendrá el carácter original <.

También tiene la opción de codificar CDATA el nodo de texto. En este caso, el carácter serializado es < dentro de un bloque CDATA. Muchas API XML no retendrán ninguna diferencia entre CDATA y los nodos de texto. CDATA debe considerarse como un mecanismo de escape para facilitar la edición a los autores humanos.

1

El < en los nodos de texto de un xml deben ser representados como &lt;.

Si lo reemplaza usando s/&lt;/</g antes de escribirlo en el archivo xml, dará lugar a un error de análisis cuando lea de ese archivo.

0

permite utilizar las siguientes funciones para hacer el viceversa operación

htmlspecialchars y

htmlentities()

+0

Gracias por esto. lo verificará – boom

+0

Hola, mi código está en cocoa. ¿Puede dar métodos alternativos para convertir en cacao en lugar de htmlspecialchars y htmlentities() – boom

+0

@Lenin: Lo siento, no estoy al tanto del cocao – Pavunkumar

0

El carácter < debe ser escapado cuando no es parte de una etiqueta XML (see here). Realmente no se debe romper la especificación XML ...

Sin embargo, si debe hacerlo, se puede realizar un truco antes de escribir su documento XML:

  1. reemplazar a las instancias del < con una cadena única que no será escapado por su analizador XML (algo que usted sabe que no ocurre en ninguna otra parte del archivo). Algo como *-lt-* probablemente sea suficiente.
  2. Haga que el analizador produzca el archivo & guárdelo.
  3. Leer en el archivo de texto plano como , y reemplazar las instancias de *-lt-* con el ordinario < carácter.
  4. Vuelva a escribir el archivo, trozando la versión escrita por el analizador XML.

Una vez más, es una idea terrible para romper la especificación XML ... haciendo esto, ningún analizador será capaz de leer su nuevo documento XML.

0

Si desea reemplazar & lt a < en el documento XML a través de php:

$xmlFile = file_get_contents("example.xml"); 

$xml= str_replace(['&lt;','&gt;'],['<','>'], $xmlFile); 

echo $xml; 

estoy recibiendo servicio de noticias de un servidor a través de XML y luego guardarlo en otro archivo XML, estoy que consigue el resultado con &lt; y &gt;, así que utilicé este método. No es la forma más inteligente de almacenar XML, pero tampoco soy un experto en tecnología avanzada.