在测试创建XML文档的代码后,我看到在写入以换行符结尾的字符串之后,下一行的WriteEndElement
根本没有缩进。之后的WriteStartElement
已正确缩进。
我尝试了NewLineHandling
的所有三个设置,而没有进行任何更改。该元素不能包含CDATA
注释,因为目标系统不知道该怎么做。
我的代码:
using System;
using system.xml;
using System.Text;
using System.IO;
public class Program
{
public static void Main()
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Async = false;
settings.CloseOutput = false;
settings.ConformanceLevel = ConformanceLevel.Document;
settings.Encoding = Encoding.UTF8; // Encoding.GetEncoding(28605);
settings.Indent = true;
settings.IndentChars = " ";
settings.NamespaceHandling = NamespaceHandling.Default;
settings.NewLineChars = Environment.NewLine;
settings.NewLineHandling = NewLineHandling.Entitize;
settings.NewLineonAttributes = false;
settings.OmitXmlDeclaration = false;
settings.WriteEndDocumentOnClose = false;
using (MemoryStream ms = new MemoryStream())
{
using (XmlWriter xmlWriter = XmlWriter.Create(ms,settings))
{
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("RootNode");
xmlWriter.WriteStartElement("subnode");
xmlWriter.WriteString("12\r\n354\r\n");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("guid");
xmlWriter.WriteString(Guid.NewGuid().ToString("D"));
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
xmlWriter.Flush();
}
ms.Flush();
ms.Position = 0;
using (StreamReader reader = new StreamReader(ms))
{
Console.Write(reader.ReadToEnd());
}
}
}
}
预期输出:
<?xml version="1.0" encoding="utf-8"?>
<RootNode>
<subnode>12
354
</subnode>
<guid>5c712399-c7b3-45e1-be3d-d5f6718e07b9</guid>
</RootNode>
我得到的输出:
<?xml version="1.0" encoding="utf-8"?>
<RootNode>
<subnode>12
354
</subnode>
<guid>6ffbd53c-6b9d-482c-b006-ca5f6d40293d</guid>
</RootNode>
如您所见,</subnode>
标签未正确对齐,无论我尝试什么,它都一直保持这种样子。重复一遍:即使我将NewLineHandling设置为Entitize
,</subnode>
标签也无法正确缩进-我不理解。
.NET 4.5.2和.NET 4.7.2。