Pregunta

Tengo XML lo que obtendrá de la aplicación y la estructura de terceros.

<root>
 <id>1</id>
 <data>&lt;node&gt;i like it&lt;node&gt;\n\r
  &lt;node&gt;i like it&lt;node&gt;</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:

"&lt;node&gt;i like it&lt;node&gt;\n  &lt;node&gt;i like it&lt;node&gt;"

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();?

¿Fue útil?

Solución

... El valor del elemento de datos es:

"&lt;node&gt;i like it&lt;node&gt;\n  &lt;node&gt;i like it&lt;node&gt;"

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();?

pudo regex-replace \n$\s* con la cadena vacía:

Regex.Replace(data, @"\n\s*", String.Empty, RegexOptions.Multiline)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top