在 xml 属性 C# 之间保留新行



我有一个由用户输入的XML,我必须向其添加一些属性,然后以字符串形式返回更改后的XML。

现在的问题是,它忽略了属性之间的退格键。这是我所说的一个例子:

我得到的XML:

<note day="12" 
      month="11"
      year="2002"
      to="Tove"
      from="Jani" 
      heading="Reminder">
</note>

我想返回的 XML:

<note day="12" 
      month="11"
      year="2002"
      to="Tove"
      from="Jani" 
      heading="Reminder"
      body="Don't forget me this weekend!">
</note>

实际返回的 XML:

<note day="12" month="11" year="2002" to="Tove" from="Jani" heading="Reminder" body="Don't forget me this weekend!">
</note>

下面是如何将 xmlContent (用户定义的 XML 作为字符串(加载到 XmlDocument 类的代码。

        XmlDocument xmlDocument= new XmlDocument();
        xmlDocument.PreserveWhitespace = true;
        xmlDocument.LoadXml(xmlContent);

但是 XmlDocument.PreserveWhitespace 在使用换行符分隔属性时似乎不起作用。

为了从 XmlDocument 创建字符串,我使用以下代码:

 using (var sw = new StringWriter())
 {
     using (var xw = XmlWriter.Create(sw, settings))
     {
        xw.WriteString(xmlDocument.InnerXml);
     }
     string stringToOutput = sw.ToString();               
 }

尝试查看设置。缩进字符。

var settings = new XmlWriterSettings() 
{
    IndentChars = "rn"
}

没有 XML 解析器会保留属性之间出现的精确空格。它只是化妆品。如果您的应用程序依赖于正确设置空格,则该应用程序已严重损坏,您应该修复它。

我们在StackOverflow上经常看到两种问题。

(a(我们看到人们在不使用XML解析器的情况下阅读XML,通常使用正则表达式。不可避免地,只有当传入的 XML 格式完全符合他们的预期时,这些人才能处理传入的 XML。

(

b(然后,我们看到人们试图生成XML,其格式与类别(a(中的某人所期望的完全一致。这通常只能通过"手动格式化"XML 来实现,而不是通过使用通用的 XML 库来实现。

这些人错过了XML的全部意义,即使用广泛可用的库支持的标准格式进行数据交换,以降低成本。

最新更新