Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Codigo de escape \n para XML

Iniciado por Pogacha, 30 de Agosto de 2007, 03:29:46 PM

« anterior - próximo »

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!

Tei

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.

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 ...

Tei

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.

Pogacha

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.

bnl

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>
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

Pogacha

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.

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
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

senior wapo

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

LC0

¿No te sirve un &#-borrar-este-texto-10;?

Pogacha

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.

Tei

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.

Juan Mellado

La secuencia según el estándar:
&#xD;
¿Get_Node_Data() devuelve el contenido "raw" o "text"?

Saludos






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.