123 votes

Ce qui est le moyen le plus simple à obtenir en retrait XML avec ligne casse de XmlDocument ?

Quand j’ai accumuler XML à partir de zéro avec , la propriété a déjà tout bien en retrait avec sauts de ligne. Cependant, si j’appelle sur certains XML très « compressé » (pas de sauts de ligne ou de retrait) puis la sortie de reste de cette façon. Donc...

Quel est le moyen le plus simple pour obtenir une sortie XML embellie d’une instance de `` ?

233voto

Neil C. Obremski Points 3747

Basé sur les autres réponses, j’ai regardé dans `` et est venu avec la méthode d’assistance suivante :

C’est un peu plus de code que j’ai espéré, mais cela fonctionne juste peachy.

52voto

DocMax Points 5744

Comme tiré du blog de Erika Ehrli , cela devrait le faire :

44voto

JFK Points 148

Ou encore plus facile si vous avez accès à Linq

22voto

Jonathan Mitchem Points 458

Une version plus courte de méthode extension

14voto

Uwe Keim Points 15221

Si les Embellir méthode est appelée pour un XmlDocument qui contient déjà un XmlProcessingInstruction nœud enfant l'exception suivante est générée:

Ne peut pas écrire la déclaration XML. WriteStartDocument méthode a déjà écrit-il.

C'est ma version modifiée de l'original pour se débarrasser de l'exception:

private static string beautify(
    XmlDocument doc)
{
    var sb = new StringBuilder();
    var settings =
        new XmlWriterSettings
            {
                Indent = true,
                IndentChars = @"    ",
                NewLineChars = Environment.NewLine,
                NewLineHandling = NewLineHandling.Replace,
            };

    using (var writer = XmlWriter.Create(sb, settings))
    {
        if (doc.ChildNodes[0] is XmlProcessingInstruction)
        {
            doc.RemoveChild(doc.ChildNodes[0]);
        }

        doc.Save(writer);
        return sb.ToString();
    }
}

Il fonctionne pour moi maintenant, probablement, vous auriez besoin de numériser tous les nœuds enfants de l' XmlProcessingInstruction nœud, et pas seulement le premier?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X