2009-02-26 14 views
5

Czy istnieje sposób na pobranie łańcucha xml w .NET i ułatwienie czytania? Chodzi mi o to czy mogę przekonwertować to:Uczyń xml bardziej czytelnym

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

do tego:

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

jest jakiś wbudowany w klasie do tego? jak serwer sql 2005 wydaje się usunąć całe formatowanie na xml, aby zaoszczędzić miejsce lub coś ...

Odpowiedz

16

Jeśli używasz .NET 3.5, można ładować go jako XDocument a następnie wystarczy wywołać ToString(), które będzie odpowiednio wcięte. Na przykład:

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

Wynik:

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

Jeśli piszesz do pliku lub innego strumienia, a następnie XDocument.Save będzie (domyślnie) wciąć też.

(wierzę XElement posiada wszystkie te same cechy, jeśli naprawdę nie potrzebują XDocument).

+0

Mam tę aplikację w katalogu \ bin, nazywa się "xmlpp" dla ładnego druku XML. nieoceniony. – Cheeso

5

Jak zapisać/zapisać XML z powrotem do pliku?

Można utworzyć XmlWriter i przekazać instancję XmlWriterSettings, gdzie ustawić właściwość wcięcie true:

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

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

No w tej chwili ja dont zapisać go do pliku i po prostu pokazać go w messagebox więc wszystko co mam to ciąg .. – Peter

+1

@Petoj - dobrze; zapisz go do StringWriter, a następnie wywołaj ToString() na StringWriter –

1

Możesz wczytać ciąg do obiektu XDocument i zapisać go ponownie na łańcuchu:

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

To daje xml sformatowany w ten sposób:

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

Przede wszystkim, określili C# i VB.NET obu. Tak więc moja odpowiedź będzie dla nich obu.

Można zdefiniować funkcję, która pobiera łańcuch XML jako parametr typu String.

Powiedzmy;

Utworzono funkcję:

[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 

Następnie można simpyl wywołać tę funkcję jako:

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

Następnie możesz po prostu zadzwonić t jego funkcja:

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

UWAGA: Nie próbowałem wersji C#, ale powinno działać.

Nadzieja to pomaga ..

+0

FYI, nie powinieneś używać 'new XmlTextReader()' lub 'new XmlTextWriter()'. Zostały one wycofane od .NET 2.0. Zamiast tego użyj 'XmlReader.Create()' lub 'XmlWriter.Create()'. –

+0

Ponadto, jak to jest lepsze niż inne odpowiedzi, niektóre sprzed czterech lat? –

+1

@JohnSaunders ma to jedną rzecz, że inne odpowiedzi nie pozwalają określić, ile spacji ma być wciętych, nie oznaczę go jako odpowiedzi po tym wszystkim, ale jej brzeczka +1! – Peter

Powiązane problemy