【问题标题】:XElement converts \r\n to \nXElement 将 \\r\\n 转换为 \\n
【发布时间】:2023-01-24 01:24:22
【问题描述】:

我知道已经有关于此的问题:Why XElement Value property changing \r\n to \n?,但这里的问题是XElement\r\n转换为\n

我的情况有点不同,我将 \n 存储在我的 XML 中,但是如果我将 XML 保存到文件或文件流中,我会再次返回 \r\n(仅在文件中)。读取它返回\n

附件是用于查看结果的小 sn-p 代码。我可以理解由于https://www.w3schools.com/Xml/xml_syntax.asp\r\n在写入时被转换为\n,但我看不出为什么它被写入流或文件为\r\n

using System.Xml.Linq;

var text = "Test1" + Environment.NewLine + "Test2" + Environment.NewLine + "Test3";

using MemoryStream stream = new();

var xmlSource = new XElement("Data", text.Replace(Environment.NewLine, "\n"));
xmlSource.Save(stream, SaveOptions.None);
stream.Position = 0;

var xmlTarget = XElement.Load(stream);
Console.WriteLine(xmlTarget.Value);

对给定的行为有一些解释吗?

【问题讨论】:

  • Save 方法会自动添加退货,您正在添加额外的退货。
  • 如果您想更改该行为,您可以尝试使用采用 XmlWriter 的 Save 重载。对于 XmlWriter,您可以访问它的设置。特别是 XmlWriterSettings.NewLineHandling

标签: c# .net xml


【解决方案1】:

好吧,实际上......你可以使用 或者 在 XML 文档中,但符合规范的 XML 解析器会将它们中的任何一个规范化为 当它读取文档时。而通常那些行结束字符只是为了让人们更容易阅读文档,使用文档的应用程序通常会忽略它们。因此,如果使用该文档的应用程序拒绝或处理不当,那么您只会遇到严重的问题。

然而,是的,人们有时能够阅读 XML 文档是件好事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多