C#中XMLwriter的缩进和换行命令

Dar*_*ght 28 c# xml xmlwriter

我正在将一些数据写入XML文件...但是当我打开它时,所有的值都在一行中......如何以可读格式编写它?即新行和缩进中的每个节点?

FileStream fs = new FileStream("myfile.xml", FileMode.Create);

XmlWriter w = XmlWriter.Create(fs);

w.WriteStartDocument();
w.WriteStartElement("myfile");                 

w.WriteElementString("id", id.Text);
w.WriteElementString("date", dateTimePicker1.Text);
w.WriteElementString("version", ver.Text);
w.WriteEndElement();
w.WriteEndDocument();
w.Flush();
fs.Close();
Run Code Online (Sandbox Code Playgroud)

Den*_*nis 41

使用XmlTextWriter替代XmlWriter然后设置Indentation属性.

string filename = "MyFile.xml";

using (FileStream fileStream = new FileStream(filename, FileMode.Create))
using (StreamWriter sw = new StreamWriter(fileStream))
using (XmlTextWriter xmlWriter = new XmlTextWriter(sw))
{
  xmlWriter.Formatting = Formatting.Indented;
  xmlWriter.Indentation = 4;

  // ... Write elements
}
Run Code Online (Sandbox Code Playgroud)

在@jumbo评论之后,这也可以像在.NET 2中那样实现.

var filename = "MyFile.xml";
var settings = new XmlWriterSettings() 
{
    Indent = true,
    IndentChars = "    "
}

using (var w = XmlWriter.Create(filename, settings))
{
    // ... Write elements
}
Run Code Online (Sandbox Code Playgroud)

  • [不再推荐使用 XmlTextWriter](https://msdn.microsoft.com/en-Us/library/system.xml.xmltextwriter(v=vs.110).aspx)(自 .Net2.0 起)。有关详细信息,请参阅 [此 QA](/sf/ask/1825289161/)。 (2认同)

小智 29

您需要首先创建一个指定缩进的XmlWriterSettings对象,然后在创建XmlWriter时,在路径后传入XmlWriterSettings.

另外,我使用该using块让C#处理我的资源处理,这样我就不用担心在异常时丢失任何资源.

{
  XmlWriterSettings xmlWriterSettings = new XmlWriterSettings()
  {
    Indent = true,
    IndentChars = "\t",
    NewLineOnAttributes = true
  };

  using (XmlWriter w= XmlWriter.Create("myfile.xml", xmlWriterSettings))
  {
    w.WriteStartDocument();
    w.WriteStartElement("myfile");

    w.WriteElementString("id", id.Text);
    w.WriteElementString("date", dateTimePicker1.Text);
    w.WriteElementString("version", ver.Text);
    w.WriteEndElement();
    w.WriteEndDocument();
  }
}
Run Code Online (Sandbox Code Playgroud)


jve*_*ema 7

检查"设置"属性:

w.Settings.Indent = true;
Run Code Online (Sandbox Code Playgroud)

编辑:您无法直接设置:

System.Xml.XmlWriter.Create("path", new System.Xml.XmlWriterSettings())
Run Code Online (Sandbox Code Playgroud)