2009-02-26 18 views
5

¿Hay alguna manera de tomar una cadena xml en .net y hacer que sea fácil de leer? lo que quiero decir es puedo convertir esto:Haga que xml sea más legible

<element1><element2>some data</element2></element1> 

a esto:

<element1> 
    <element2> 
     some data 
    </element2> 
</element1> 

¿hay alguna construyeron en la clase para esto? como SQL Server 2005 parece eliminar todo el formato en xml para ahorrar espacio o algo ...

Respuesta

16

Si está utilizando .NET 3.5, se puede cargar como un XDocument y luego simplemente llame a ToString() que lo sangrará apropiadamente. Por ejemplo:

using System; 
using System.Xml.Linq; 

public class Test 
{ 
    static void Main() 
    { 
     string xml = "<element1><element2>some data</element2></element1>"; 

     XDocument doc = XDocument.Parse(xml); 
     xml = doc.ToString(); 
     Console.WriteLine(xml); 
    } 
} 

Resultado:

<element1> 
    <element2>some data</element2> 
</element1> 

Si va a escribir en un archivo u otra corriente, entonces se XDocument.Save (por defecto) sangrar demasiado.

(creo XElement tiene todas las mismas características, si usted realmente no necesita un XDocument.)

+0

Tengo esta aplicación en mi directorio \ bin, se llama "xmlpp" para XML pretty-print. inestimable. – Cheeso

5

¿Cómo se guarda/escribe el XML en un archivo?

Se puede crear un XmlWriter y pasarlo una instancia XmlWriterSettings, donde se establece la propiedad sangría true:

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Indent = true; 

XmlWriter writer = XmlWriter.Create (outputStream, settings); 
+0

bien en este momento yo no escribir en un archivo que acaba de aparecer en un cuadro de mensaje así que todo lo que tengo es una cadena .. – Peter

+1

@Petoj - fina; escríbalo en un StringWriter, luego llame a ToString() en el StringWriter –

1

Puede cargar la cadena en un objeto XDocument y guardarlo en una cadena de nuevo:

XDocument doc = XDocument.Load(new StringReader(xmlString)); 
StringWriter writer = new StringWriter(); 
doc.Save(writer); 
string readable = writer.ToString(); 

que le dará el formato XML de esta manera:

<?xml version="1.0" encoding="utf-16"?> 
<element1> 
    <element2>some data</element2> 
</element1> 
0

En primer lugar, se han etiquetado C# y VB.NET ambos. Entonces mi respuesta será para ambos.

Puede definir la función que obtiene cadena XML como parámetro en el tipo de Cadena.

Digamos;

que ha creado una función como:

[VB]

Private Function PrettyXML(XMLString As String) As String  
     Dim sw As New StringWriter() 
     Dim xw As New XMLWriter(sw) 
     xw.Formatiing = Formatting.Indented 
     xw.Indentation = 4 

     Dim doc As New XMLDocument 
     doc.LoadXML(XMLString) 
     doc.Save(xw) 
     Return sw.ToString()  
End Function 

A continuación, puede simpyl llamar a esta función como:

Dim myXML As String = "<element1><element2>some data</element2></element1>" 
Dim myPrettyXML As String 
myPrettyXML = PrettyXML(myPrettyXML) 

[C#]

Private String PrettyXML(string XMLString) 
    { 
     StringWriter sw = new StringWriter(); 
     XMLTextWriter xw = new XmlTextWriter(sw); 
     xw.Formatiing = Formatting.Indented; 
     xw.Indentation = 4; 
     XmlDocument doc = new XmlDocument(); 
     doc.Save(xm); 
     return sw.ToString(); 
    } 

Entonces simplemente puedes llamar t su función como:

string myXML = "<element1><element2>some data</element2></element1>"; 
string myPrettyXML = ""; 
myPrettyXML = PrettyXML(myPrettyXML); 

NOTA: No he probado la versión de C#, pero debería funcionar.

Espero que esto ayude ..

+0

FYI, no debe usar 'new XmlTextReader()' o 'new XmlTextWriter()'. Han sido desaprobados desde .NET 2.0. Use 'XmlReader.Create()' o 'XmlWriter.Create()' en su lugar. –

+0

Además, ¿cómo es esto mejor que las otras respuestas, algunas de hace cuatro años? –

+1

@JohnSaunders esto tiene una cosa que las otras respuestas no proporcionan, puedes especificar cuántos espacios para sangrar, ¡no lo marcaré como la respuesta después de todo este tiempo, pero es mucho más un +1! – Peter

Cuestiones relacionadas