使xml更具可读性

时间:2009-02-26 10:17:57

标签: c# .net xml vb.net text-formatting

有没有办法在.net中获取xml字符串并使其更容易阅读? 我的意思是我可以转换这个:

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

到此:

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

有没有内置的课程?因为sql server 2005似乎删除了xml上的所有格式以节省空间或某些东西......

5 个答案:

答案 0 :(得分:16)

如果您使用的是.NET 3.5,则可以将其加载为XDocument,然后只需调用ToString(),它将适当地缩进它。例如:

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

结果:

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

如果您将其写入文件或其他流,则XDocument.Save(默认情况下)也会缩进它。

(我相信XElement具有所有相同的功能,如果您真的不需要XDocument。)

答案 1 :(得分:5)

如何将XML保存/写回文件?

您可以创建一个XmlWriter并将其传递给XmlWriterSettings实例,您可以将Indent属性设置为true:

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

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

答案 2 :(得分:1)

您可以将字符串加载到XDocument对象中并再次将其保存为字符串:

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

这将为您提供以这种方式格式化的xml:

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

答案 3 :(得分:0)

看看

XmlWriterSettings

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

你可以定义Indent和IndentChars

答案 4 :(得分:0)

首先,您已经标记了C#和VB.NET。所以我的答案将适用于他们两个。

您可以定义将XML字符串作为String类型的参数的函数。

让我们说吧;

您创建了一个函数:

[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

然后你可以将这个函数简化为:

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

然后你可以简单地将这个函数称为:

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

注意:我没有尝试过C#版本,但应该可以使用。

希望这会有所帮助..