【问题标题】:How can I generate XML with CR, instead of CRLF in XmlTextWriter如何使用 CR 生成 XML,而不是 XmlTextWriter 中的 CRLF
【发布时间】:2011-03-25 19:46:47
【问题描述】:

我正在通过 XmlTextWriter 生成 XML。

文件在我看来不错,通过了验证 (at wc3),并被客户接受。

但客户供应商抱怨行尾是 CRLF,而不仅仅是 CR。

嗯,我在使用 C# 的 Win32 机器上,CRLF 是 Win32 标准行尾。 有没有办法改变 XmlTextWriter 中的行尾?

另外——对于正确的 XML 解析器来说,行尾是否应该无关紧要?

另见:What are carriage return, linefeed, and form feed?

注意:看起来唯一的答案是一个侧面的解决方案——你必须使用 XmlWriter 而不是 XmlTextWriter

【问题讨论】:

  • 请注意,流行的其他方式是使用单个 LF,而不是 CR。
  • new XmlTextWriter() 自 .NET 2.0 以来已被弃用。请改用XmlWriter.Create

标签: c# xml newline xmltextwriter


【解决方案1】:

当然,询问后不久,我在 MSDN 上找到了一条线索(我无法通过 google 找到),它指的是 XmlWriterSettings.NewLineChars

然后我在SO: Writing XMLDocument to file with specific newline character (c#) 上得到了不被接受的答案

这都是术语......

【讨论】:

  • 一周过去了,我接受了自己的答案,没有人赞成;我在等着看是否会出现新的东西。
【解决方案2】:

使用 XmlWriterSettings 将您想要的内容设置为行尾字符。

XmlWriterSettings mySettings = new XmlWriterSettings();
mySettings.NewLineChars = "\r";

XmlWriter writer = XmlWriter.Create(
                         new StreamWriter(@"c:\temp\hello.xml", mySettings);

我不知道行尾字符在哪里很重要。我以前没遇到过。

【讨论】:

    【解决方案3】:

    对于正确实现的解析器(参见the spec),使用什么行尾无关紧要,我引用(强调我的):

    为了简化应用程序的任务, XML 处理器必须表现得好像它 规范化外部所有换行符 解析的实体(包括 文档实体)在输入时,之前 解析,通过翻译 两个字符序列#xD #xA 和任何#xD 后面没有#xA 到单个#xA 字符。

    因此,您应该对现在的方式感到满意。您可能想问一下客户供应商实际上在做什么,很可能他们做错了。

    【讨论】:

    • 我同意你的观点,但这是客户的供应商,所以我们无法说他们的实施存在问题。
    【解决方案4】:

    使用 XmlWriterSettings.NewLineChars 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-18
      • 2015-03-01
      • 2022-01-22
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多