2009-04-21 12 views

Respuesta

18

Aquí hay una pequeña clase que reuní hace algún tiempo para hacer exactamente esto.

Supone que está trabajando con XML en formato de cadena.

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

Es aún más fácil cuando lo agrega como un método de extensión :) – Urda

+0

¡Te quiero !!!!!!!!!!!!!! – ChandlerPelhams

+0

Spot on, gracias por el código :) –

1

Debería poder hacer esto con formateadores de código. Tendría que html codificar el xml en la página primero.

Google tiene a nice prettifyer que es capaz de visualizar XML así como varios lenguajes de programación.

Básicamente, poner el XML en una etiqueta pre así:

<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

Uso del XML Web Server Control para mostrar el contenido de un documento XML en una página web.

EDITAR: Debe pasar todo XmlDocument a la propiedad de documento del control del servidor web XML para mostrarlo. No necesita usar la propiedad InnerXml.

0

Si la identación es su única garantía y si puede permitirse ejecutar el proceso xternall, puede procesar el archivo xml con la herramienta de consola HTML Tidy (~ 100K).

El código es:

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

A continuación, puede mostrar cadena idented en la página web una vez que deshacerse de los caracteres especiales.

También sería fácil crear una función recursiva que produzca dicha salida: simplemente itere los nodos comenzando desde la raíz e ingrese el próximo paso de recursión para el nodo secundario, pasando la identación como parámetro a cada nueva llamada de recursión.

0

Echa un vistazo gratis al Actipro CodeHighlighter para ASP.NET - puede mostrar claramente XML y otros formatos.

¿O está más interesado en realmente formatear su XML? Luego eche un vistazo a XmlTextWriter: puede especificar elementos como Formato (sangrando o no) y el nivel de sangría, y luego escriba su XML a, p. un MemoryStream y leerlo desde allí en una cadena para mostrar.

Marc

0

Utilice un XmlTextWriter con los XmlWriterSettings configurado para que la sangría está activado. Puede usar un StringWriter como "almacenamiento temporal" si desea escribir la cadena resultante en la pantalla.

Cuestiones relacionadas