Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Pogacha en 30 de Agosto de 2007, 03:29:46 PM

Título: Codigo de escape \n para XML
Publicado por: Pogacha en 30 de Agosto de 2007, 03:29:46 PM
Que tal,

Tengo que agragar un salto de linea a una linea xml sin ponerlo realmente. ¿Como se hace?

Lo que quiero es esto:<MiEntidad MiPropiedad="Valor"> Hola!
Chau! </MiEntidad>
Pero que se vea como esto:<MiEntidad MiPropiedad="Valor"> Hola!\nChau! </MiEntidad>
Ese \n no anda seguro, pero no encontré como hacerlo, en los codigos de escape no hay nada como salto de linea o retorno de carro.

Gracias por adelantado!
Título: Re: Codigo de escape \n para XML
Publicado por: Tei en 30 de Agosto de 2007, 04:20:00 PM
Cita de: "Pogacha"Que tal,

Tengo que agragar un salto de linea a una linea xml sin ponerlo realmente. ¿Como se hace?

Lo que quiero es esto:<MiEntidad MiPropiedad="Valor"> Hola!
Chau! </MiEntidad>
Pero que se vea como esto:<MiEntidad MiPropiedad="Valor"> Hola!\nChau! </MiEntidad>
Ese \n no anda seguro, pero no encontré como hacerlo, en los codigos de escape no hay nada como salto de linea o retorno de carro.

Gracias por adelantado!

XML es un tipo de animal con garras, 30 metros de alto, y 20 metros de lado.  No entiendo porque la gente lo confunde con los gatos comunes. XML ni siquiera esta domesticado.

Por tanto y en el peor de los casos, quizas puedas hacer algo como esto:
<MiEntidad MiPropiedad="Valor"><![CDATA[ Hola!
Chau! ]]></MiEntidad>


O quizas siendo creativo, en el dtd inventar una entidad que signifique \n

De todos modos yo no se nada de XML, y negare haber escrito esto.
Título: Codigo de escape \n para XML
Publicado por: Pogacha en 30 de Agosto de 2007, 04:43:40 PM
OK, pero mi primera linea anda.
Eso que propones es lo mismo que no quiero hacer.
Yo quiero poner un codigo de escape para evitar tener que hacer saltos de linea en el XML.
Sino puedo armar un codigo externo y convertirlo, pero he de suponer que el xml lo puede permitir.
En teoria si pusiese &#xd; tendria que andar, pero no.
Y no encuentro por que ...
Título: Codigo de escape \n para XML
Publicado por: Tei en 30 de Agosto de 2007, 05:08:31 PM
Cita de: "Pogacha"OK, pero mi primera linea anda.
Eso que propones es lo mismo que no quiero hacer.
Yo quiero poner un codigo de escape para evitar tener que hacer saltos de linea en el XML.
Sino puedo armar un codigo externo y convertirlo, pero he de suponer que el xml lo puede permitir.
En teoria si pusiese &#xd; tendria que andar, pero no.
Y no encuentro por que ...

No es que yo entienda de estas cosas...
No lo entiendo. Si estas serializando algo, y pones los caracteres &#xD;, por fuerza cuando lo desserializes tienes "&#xD;" en el flujo, y al menos la posibilidad de desserializarlo como \n de alguna manera.
Esto es mas una pregunta que otra cosa :D
El desserializador que lo desserialize, buen desserializador sera.

Esto:
<MiEntidad MiPropiedad="Valor"> Hola!
Chau! </MiEntidad>
y esto:
<MiEntidad MiPropiedad="Valor">Hola!
Chau!</MiEntidad>

Es posible que sean equivalentes... Y negare haber escrito esto.
Título: Codigo de escape \n para XML
Publicado por: Pogacha en 30 de Agosto de 2007, 06:15:08 PM
No es para serializar, es para que yo pueda introducir cadenas en un archivo XML a mano y luego leerlas.
Creo que voy a tirar de usar un indicador que cuando lea el xml lo convierta en '\n'. Suponia que el formato XML lo preveia de algún modo, pero parece que no.
Saludos.
Título: Codigo de escape \n para XML
Publicado por: bnl en 30 de Agosto de 2007, 06:45:48 PM
Si lo que quieres es tras leer el XML obtener una cadena que contenga el \n ¿porque no pones el \n directamente en el XML como pusistes en el primer posty  y asi no tienes luego q transformarlo?
<MiEntidad MiPropiedad="Valor"> Hola!\nChau! </MiEntidad>
Título: Codigo de escape \n para XML
Publicado por: Pogacha en 30 de Agosto de 2007, 09:10:27 PM
Pasa que si hago:printf("hola\nchau!");me imprime
Citarhola
chau!
pero si:
t.xml
Citar<a>Hola\nchau!</a>
El codigo:printf(xml->Get_Node_Data());me imprime:
CitarHola\nchau!

Ahora si:
t.xml
Citar<a>Hola
chau!</a>
El codigo:printf(xml->Get_Node_Data());me imprime:
CitarHola
chau!

Lo que busco es:
t.xml
Citar<a>Hola(ACA LO QUE SEA)chau!</a>
El codigo:printf(xml->Get_Node_Data());me imprima:
CitarHola
chau!


Una Solucion:
t.xml
Citar<a>Hola\nchau!</a>
printf( ConvertirBarraNEn0xD( xml->Get_Node_Data() ));
Pero queria saber si el XML ya tenia un codigo de escape para el salto de carro así como es el &amp y esos.

Saludos.
Título: Codigo de escape \n para XML
Publicado por: bnl en 31 de Agosto de 2007, 10:03:57 AM
¿Has probado a meter en una variable de tipo string el xml->Get_Node_Data()
y compararlo con tu cadena que metes dentro del printf ("hola\nchau!") ?
un \n y el otro deben ser distintos en algo
Título: Codigo de escape \n para XML
Publicado por: senior wapo en 31 de Agosto de 2007, 10:51:29 AM
Cita de: "bnl"¿Has probado a meter en una variable de tipo string el xml->Get_Node_Data()
y compararlo con tu cadena que metes dentro del printf ("hola\nchau!") ?
un \n y el otro deben ser distintos en algo

\n es una expansión que hace el compilador de C/C++, que sustituye la barra y la n por un retorno de carro al compilar una cadena de texto que aparece dentro de código fuente.

En un fichero de texto una barra y una n solo son eso, dos caracteres al azar consecutivos :P
Título: Codigo de escape \n para XML
Publicado por: LC0 en 31 de Agosto de 2007, 12:28:46 PM
¿No te sirve un &#-borrar-este-texto-10;?
Título: Codigo de escape \n para XML
Publicado por: Pogacha en 31 de Agosto de 2007, 01:29:22 PM
Si, como solución es hacer un preproceso.

Hago que el caracter | signifique un salto de linea.

std::string Convertir( const char* cadena )
{
 std::string x = cadena;
 for(int i=0; cadena[i]; ++i) if(cadena[i]=="|") x[i]=13;
 return x;
}

Y listo.
Pero seria tonto hacerlo si el formato XML ya tuviera algo preparado.
Saludos.
Título: Codigo de escape \n para XML
Publicado por: Tei en 31 de Agosto de 2007, 01:45:33 PM
si cambias de opinion, y decides embeber los caracters \n en el texto, siempre puedes hacer algo como esto

char nodoTextoXML = "tengo\nuna cosa";
char * resultado;
resultado = malloc( strlen(nodoTextoXML) );
sprintf( resultado, nodoTextoXML );

de modo que caracteres como \n se evaluen a un retorno de carro de la plataforma donde corra el programa.
Título: Codigo de escape \n para XML
Publicado por: Juan Mellado en 31 de Agosto de 2007, 06:02:34 PM
La secuencia según el estándar:
&#xD;
¿Get_Node_Data() devuelve el contenido "raw" o "text"?

Saludos