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!
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.
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 
 tendria que andar, pero no.
Y no encuentro por que ...
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 
 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 
, por fuerza cuando lo desserializes tienes "
" 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.
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.
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>
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 & y esos.
Saludos.
¿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
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
¿No te sirve un &#-borrar-este-texto-10;?
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.
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.
La secuencia según el estándar:

¿Get_Node_Data() devuelve el contenido "raw" o "text"?
Saludos