Come faccio a smettere di fuggire XElement.Save personaggi?
Domanda
Sto popolando un XElement
con le informazioni e la scrittura in un file XML utilizzando il metodo XElement.Save(path)
. Ad un certo punto, alcuni caratteri nel file risultante sono fuggiti - per esempio, >
diventa >
.
Questo comportamento è inaccettabile, dal momento che ho bisogno di memorizzare le informazioni in XML che include il carattere >
come parte di una password. Come faccio a scrivere il contenuto 'crudo' di mio oggetto XElement in XML senza dover questi scappati?
Soluzione
La specifica XML permette di solito >
di apparire escape. XDocument
gioca sul sicuro e sfugge anche se appare in luoghi in cui non è strettamente necessaria la fuga.
Si può fare una sostituzione sul XML generato. Essere consapevoli per http://www.w3.org/TR/REC-xml#syntax , se ciò comporta alcun sequenze ]]>
, l'XML è conforme alla specifica XML. Inoltre, XDocument.Parse
sarà effettivamente rifiutare tale XML con l'errore " ']]>' non è consentito nei dati di caratteri.".
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);
In considerazione che qualsiasi parser XML spec-compliant deve supportare >
, consigliamo vivamente che fissa il codice che sta elaborando l'output XML del programma.
Altri suggerimenti
La mancanza di questo comportamento è inaccettabile.
Un autonomo senza caratteri di escape >
è non valida XML .
XElement è progettato per produrre XML valido.
Se si desidera ottenere l'escape contenuto dell'elemento, utilizzare la proprietà Value
.