2009-04-21 3 views
5

Je souhaite afficher ma propriété InnerXml pour l'afficher dans une page Web. Je voudrais voir l'indentation des différentes étiquettes. Y a-t-il un moyen facile de faire ceci?Y at-il un moyen rapide de formater un XmlDocument pour l'affichage en C#?

+0

Comme le temps passe par et nous avons LINQ to XML maintenant, vous pouvez utiliser la classe '' XDocument' de l'espace de noms System.Xml.Linq' pour imprimer votre XML avec indentation: 'XDocument.Parse (doc.InnerXml) '. – jwaliszko

Répondre

18

Voici une petite classe que j'ai rassemblée il y a quelques temps pour faire exactement cela.

Il suppose que vous travaillez avec le format XML au format chaîne.

public static class FormatXML 
{ 
    public static string FormatXMLString(string sUnformattedXML) 
    { 
     XmlDocument xd = new XmlDocument(); 
     xd.LoadXml(sUnformattedXML); 
     StringBuilder sb = new StringBuilder(); 
     StringWriter sw = new StringWriter(sb); 
     XmlTextWriter xtw = null; 
     try 
     { 
      xtw = new XmlTextWriter(sw); 
      xtw.Formatting = Formatting.Indented; 
      xd.WriteTo(xtw); 
     } 
     finally 
     { 
      if(xtw!=null) 
       xtw.Close(); 
     } 
     return sb.ToString(); 
    } 
} 
+1

C'est encore plus facile quand on l'ajoute comme méthode d'extension :) – Urda

+0

Je t'aime !!!!!!!!!!!!!! – ChandlerPelhams

+0

Spot sur, merci pour le code :) –

1

Vous devriez être capable de le faire avec des formateurs de code. Il faudrait d'abord encoder le XML dans la page.

Google a a nice prettifyer qui est capable de visualiser XML ainsi que plusieurs langages de programmation.

Fondamentalement, mettre votre XML dans une balise pré comme ceci:

<pre class="prettyprint"> 
    &lt;link href="prettify.css" type="text/css" rel="stylesheet" /&gt; 
    &lt;script type="text/javascript" src="prettify.js">&lt;/script&gt; 
</pre> 
0

Utilisez le XML Web Server Control pour afficher le contenu d'un document XML sur une page Web.

EDIT: Vous devez passer l'intégralité de XmlDocument à la propriété Document du contrôle XML Web Server pour l'afficher. Vous n'avez pas besoin d'utiliser la propriété InnerXml.

0

Si l'identification est votre seul cocern et si vous pouvez vous permettre de lancer le processus xternall, vous pouvez traiter le fichier xml avec l'outil console HTML Tidy (~ 100K).

Le code est:

tidy --input-xml y --output-xhtml y --indent "1" $(FilePath) 

Ensuite, vous pouvez afficher la chaîne sur la page identififiés règle web une fois que vous vous débarrasser de caractères spéciaux. Il serait également facile de créer une fonction récursive qui produit une telle sortie - il suffit de parcourir les nœuds à partir de la racine et de passer à l'étape de récurrence suivante pour le nœud enfant, en passant l'identifiant comme paramètre à chaque nouvel appel récursif.

0

Découvrez le fichier gratuit Actipro CodeHighlighter pour ASP.NET - il peut afficher de manière soignée XML et d'autres formats.

Ou êtes-vous plus intéressé par le formatage de votre XML? Jetez un coup d'œil au XmlTextWriter - vous pouvez spécifier des choses comme Format (indentant ou non) et le niveau de retrait, puis écrire votre XML par exemple. un MemoryStream et le lire à partir de là dans une chaîne pour l'affichage.

Marc

0

Utilisez un XmlTextWriter avec les XmlWriterSettings mis en place de telle sorte que l'indentation est activée. Vous pouvez utiliser un StringWriter comme "stockage temporaire" si vous voulez écrire la chaîne résultante sur l'écran.

Questions connexes