XmlWriter.WriteEndElement不在字符串结尾的换行符后缩进

在测试创建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&#xD;
354&#xD;
  </subnode>
  <guid>5c712399-c7b3-45e1-be3d-d5f6718e07b9</guid>
</RootNode>

我得到的输出:

<?xml version="1.0" encoding="utf-8"?>
<RootNode>
  <subnode>12&#xD;
354&#xD;
</subnode>
  <guid>6ffbd53c-6b9d-482c-b006-ca5f6d40293d</guid>
</RootNode>

如您所见,</subnode>标签未正确对齐,无论我尝试什么,它都一直保持这种样子。重复一遍:即使我将NewLineHandling设置为Entitize</subnode>标签也无法正确缩进-我不理解。

.NET 4.5.2和.NET 4.7.2。

edward217 回答:XmlWriter.WriteEndElement不在字符串结尾的换行符后缩进

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3103222.html

大家都在问