¿Cómo paro XElement.Save escape de caracteres?
Pregunta
estoy poblando el XElement
con información y escribirla en un archivo XML usando el método XElement.Save(path)
. En algún momento, ciertos caracteres en el archivo resultante se escaparon - por ejemplo, se convierte en >
>
.
Este comportamiento es inaceptable, ya que necesito para almacenar la información en el archivo XML que incluye el carácter >
como parte de una contraseña. ¿Cómo puedo escribir el contenido 'en bruto' de mi XElement objeto a XML sin tener éstos escaparon?
Solución
La especificación XML por lo general permite >
que aparezca sin escapar. XDocument
juega a lo seguro y se escapa aunque aparece en lugares donde no es estrictamente necesario el escape.
Se puede hacer un reemplazo en el XML generado. Tenga en cuenta por http://www.w3.org/TR/REC-xml#syntax , si esto resulta en cualquier secuencia ]]>
, el XML no cumplir con la especificación XML. Por otra parte, XDocument.Parse
realidad rechazará tales XML con el error " ']]>' no está permitido en datos de caracteres.".
XDocument doc = XDocument.Parse("<test>Test>Data</test>");
// Don't use this if it could result in any ]]> sequences!
string s = doc.ToString().Replace(">", ">");
System.IO.File.WriteAllText(@"c:\path\test.xml", s);
En consideración de que cualquier analizador XML especificación compatible debe ser compatible con >
, lo recomiendo mucho fijar el código que está procesando la salida XML de su programa.
Otros consejos
La falta de este comportamiento es inaceptable.
Un autónomo sin escapar >
es no válido XML .
XElement está diseñado para producir XML válido.
Si desea obtener el formato de escape contenido del elemento, utilice la propiedad Value
.