我有一个类似的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>