Escapó XML dentro del elemento XML
-
22-10-2019 - |
Pregunta
Tengo XML lo que obtendrá de la aplicación y la estructura de terceros.
<root>
<id>1</id>
<data><node>i like it<node>\n\r
<node>i like it<node></data>
</root>
Como puedes ver, hay un XML escapado en el interior <data>
, también al final de la primera línea de <data>
Hay una nueva línea \n\r
y 2 espacios al frente en la línea 2 en <data>
.
Aquí está mi método de deserialización:
public static root Deserialize(string xml)
{
System.IO.StringReader stringReader = null;
try
{
stringReader = new System.IO.StringReader(xml);
return ((root)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
}
finally
{
if ((stringReader != null))
{
stringReader.Dispose();
}
}
}
Después de usar este método, el valor del elemento de datos es:
"<node>i like it<node>\n <node>i like it<node>"
Y ahora, mis preguntas son:
Porque es el \r
eliminado de la cadena de datos? ¿Hay alguna manera de eliminar las nuevas líneas y espacios de otra manera que usar Simple string.replace();
?
Solución
... El valor del elemento de datos es:
"<node>i like it<node>\n <node>i like it<node>"
No, el valor en realidad es
"<node>i like it<node>\n <node>i like it<node>"
Porque es el
\r
eliminado de la cadena de datos?
los \r
está normalizado. Los rupturas de línea en XML son \n
-Solo, cualquier ocurrencia de diferentes tipos de rupturas de línea se reemplaza como parte del proceso de análisis XML.
¿Hay alguna manera de eliminar las nuevas líneas y espacios de otra manera que usar Simple
string.replace();
?
Tú pudo regex-replace \n$\s*
con la cadena vacía:
Regex.Replace(data, @"\n\s*", String.Empty, RegexOptions.Multiline)