Xml不记得子元素之前的换行符

  • 本文关键字:换行符 元素 记得 Xml c# xml
  • 更新时间 :
  • 英文 :


我有一个类似的xml文件。

<Root>
<Child123>
more nodes inside 
</Child123>
<Child123></Child123>
<Child123></Child123>
<Child123></Child123>
</Root>

我的代码生成的这个文件格式不正确,忘记了只在<Cild123>处放置硬返回。你会在2号线看到3号线Child123在2号线上启动,而它应该在3号线上?

<Root>
<Child123></Child123>
<Child123></Child123><Child123>
more nodes inside
</Child123><Child123>
more nodes inside
</Child123>
</Root>

这是我的代码,我将文件读取到列表视图中,并允许用户选择一些行,然后我单击生成,这样就可以生成上面的文件

public static string Seralize<T>(T dataToSerlize)
{
var ns = new XmlSerializerNamespaces();
ns.Add("", "");
var seralize = new XmlSerializer(dataToSerlize.GetType());
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
settings.NewLineChars = "n";          
settings.NewLineHandling = NewLineHandling.Replace;
using (var stream = new StringWriter())
{
using (var test =  XmlWriter.Create(stream, settings))
{
seralize.Serialize(test, dataToSerlize, ns);
return stream.ToString();
}                
}
} 

但是,正如您所看到的,它没有在生成的xml文件中保持正确的格式,我如何确保它保留第一个xml 的流

PS我也试过

settings.Encoding = Encoding.UTF-8;

我认为这可能是问题所在。

我也试过

settings.NewLineChars = "n";          

但仍然没有快乐。

一种方法是集中精力生成有效的XML,并让XDocument处理格式化。假设您生成的XML是有效的,您可以使用它来完成以下操作:

using System.Xml.Linq;
string rawXml = 
@"<Root>
<Child123></Child123>
<Child123></Child123><Child123>
</Child123><Child123>
</Child123>
</Root>";
XDocument formattedXml = XDocument.Parse(rawXml);

formattedXml.ToString()的输出为:

<Root>
<Child123></Child123>
<Child123></Child123>
<Child123></Child123>
<Child123></Child123>
</Root>

最新更新