XmlTextWriter incorrecte de l'écriture des caractères de contrôle

.NET XmlTextWriter crée des fichiers xml non valide.

En XML, certains caractères de contrôle sont autorisés, à l'instar de "horizontale onglet' (	), mais d'autres ne sont pas, comme "l'onglet vertical' (). (Voir spec.)

J'ai une chaîne de caractères qui contient un UTF-8 caractère de contrôle qui n'est pas autorisé dans XML.
Bien que XmlTextWriter échappe le caractère, le XML est bien sûr encore valides.

Comment puis-je m'assurer que XmlTextWriter produit jamais illégale d'un fichier XML?

Ou, s'il n'est pas possible de le faire avec XmlTextWriter, comment puis-je bande les caractères de contrôle spécifiques qui ne sont pas autorisés dans les données XML à partir d'une chaîne de caractères?

Exemple de code:

using (XmlTextWriter writer =
  new XmlTextWriter("test.xml", Encoding.UTF8))
{
  writer.WriteStartDocument();
  writer.WriteStartElement("Test");
  writer.WriteValue("hello \xb world");
  writer.WriteEndElement();
  writer.WriteEndDocument();
}

De sortie:

<?xml version="1.0" encoding="utf-8"?><Test>hello &#xB; world</Test>
Vous ne pouvez pas avoir une échappé à la verticale dans l'onglet XML? Pourriez-vous de référence de la norme?
C'est vrai, vous ne pouvez pas. XML est pour le texte, pas pour les caractères de contrôle ou de données binaires. w3.org/TR/REC-xml/#charsets

OriginalL'auteur Tom Lokhorst | 2011-11-24