Domanda

C'è un modo per prendere una stringa XML in .NET e renderlo easyer da leggere? Voglio dire posso convertire questo:

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

a questo:

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

C'è qualche costruito in classe per questo? come sql server 2005 sembra per rimuovere tutta la formattazione su XML per risparmiare spazio o qualche cosa ...

È stato utile?

Soluzione

Se si sta utilizzando .NET 3.5, è possibile caricare come un XDocument e poi basta chiamare ToString (), che sarà il rientro in modo appropriato. Ad esempio:

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);
    }
}

Risultato:

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

Se si scrive in un file o di altra corrente, quindi XDocument.Save sarà (per impostazione predefinita) il rientro troppo.

(credo XElement ha tutte le stesse caratteristiche, se non si ha realmente bisogno di un XDocument.)

Altri suggerimenti

Come si fa a salvare / scrivere il codice XML di nuovo in un file?

È possibile creare un XmlWriter e passarlo un'istanza XmlWriterSettings, in cui si imposta la proprietà Rientro a true:

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

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

È possibile caricare la stringa in un oggetto XDocument e salvarlo in una stringa di nuovo:

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

Che vi darà l'xml formattato in questo modo:

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

Date un'occhiata a

XmlWriterSettings

http://msdn.microsoft.com/en -us / library / system.xml.xmlwritersettings.aspx

è possibile definire rientro e IndentChars

Prima di tutto, si hanno taggato C # e VB.NET entrambi. Quindi la mia risposta sarà per ciascuno di essi.

È possibile definire funzione che ottiene stringa XML come parametro di tipo di stringa.

Diciamo;

È stata creata una funzione di:

[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

Poi si può simpyl chiamare questa funzione come:

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();
   }

Poi si può semplicemente chiamare questa funzione come:

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

NOTA:. Non ho provato la versione C #, ma dovrebbe funzionare

Spero che questo aiuti ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top