Instruire XmlWriterSettings à utiliser l'auto-balises de fermeture
Je suis en utilisant XmlWriterSettings à écrire du Xml dans un fichier. J'ai des éléments avec des attributs seulement, pas d'enfants. Je veux qu'ils sortie:
<element a="1" />
au lieu de
<element a="1"></element>
Puis-je le faire avec XmlWriterSettings?
EDIT:
Code est comme suit:
private void Mission_Save(string fileName)
{
StreamWriter streamWriter = new StreamWriter(fileName, false);
streamWriter.Write(Mission_ToXml());
streamWriter.Close();
streamWriter.Dispose();
_MissionFilePath = fileName;
}
private string Mission_ToXml()
{
XmlDocument xDoc;
XmlElement root;
XmlAttribute xAtt;
xDoc = new XmlDocument();
foreach (string item in _MissionCommentsBefore)
xDoc.AppendChild(xDoc.CreateComment(item));
root = xDoc.CreateElement("mission_data");
xAtt = xDoc.CreateAttribute("version");
xAtt.Value = "1.61";
root.Attributes.Append(xAtt);
xDoc.AppendChild(root);
//Out the xml's!
foreach (TreeNode node in _FM_tve_Mission.Nodes)
Mission_ToXml_private_RecursivelyOut(root, xDoc, node);
foreach (string item in _MissionCommentsAfter)
xDoc.AppendChild(xDoc.CreateComment(item));
//Make this look good
StringBuilder sb = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
settings.NewLineChars = "\r\n";
settings.NewLineHandling = NewLineHandling.Replace;
settings.OmitXmlDeclaration = true;
using (XmlWriter writer = XmlWriter.Create(sb, settings))
{
xDoc.Save(writer);
}
return sb.ToString();
}
private void Mission_ToXml_private_RecursivelyOut(XmlNode root, XmlDocument xDoc, TreeNode tNode)
{
root.AppendChild(((MissionNode)tNode.Tag).ToXml(xDoc));
foreach (TreeNode node in tNode.Nodes)
Mission_ToXml_private_RecursivelyOut(root, xDoc, node);
}
ici _FM_tve_Mission est un contrôle TreeView qui a des nœuds, chaque nœud a une étiquette de classe MissionNode, qui a ToXml méthode qui retourne XmlNode contenant ce MissionNode convertis au format xml
- quel est ton code? XmlWriter avec pas de paramètres spécifiques à l' écrit de la manière que vous voulez
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin des paramètres spéciaux pour que:
Qui vous donnera une sortie de
<element a="1" />
(Juste testé dans une application que je suis en train de travailler sur l'écriture xml pour)Fondamentalement, si vous n'avez pas ajouter toutes les données avant de vous écrire la fin de l'élément il suffit de le fermer pour vous.
J'ai aussi le suivant
XmlWriterSettings
il peut être l'un de ces si il ne fonctionne pas par défaut:Create
méthode. Vous ne pouvez pas appelerXmlWriter.Write()
parce qu'il n'existent pas. Vous devez écrire à chaque nœud avec le nom et les attributs individuellement. À partir de l'explication que vous avez donné, c'est exactement ce que vous voulez. Vous ne pouvez pas tout comme par magie transmettre des données à la xmlwriter et s'attendre à la sortie. Vous devez vous dire quels sont les éléments et les attributs de sortie.XmlWriterSettings.WriteEndDocumentOnClose
propriétéDe traitement de données XML à partir d'un fichier externe, j'ai écrit la classe suivante pour se débarrasser de Non-Vide Fermé Éléments. Mon XML maintenant a fermeture automatique des balises.
Avec la Regex et méthode récursive, il est facile d'emploi :
Et pour l'utiliser, tapez quelque chose comme ceci :
xdoc
est maintenant, une instance deXDocument
chargé de chemin d'accès donné, mais l'ensemble de ses admissibles (sans contenu) Plein Balises de Fin sont maintenant Raccourcie