如何使用 CR 生成 XML,而不是 XmlTextWriter 中的 CRLF

Posted

技术标签:

【中文标题】如何使用 CR 生成 XML,而不是 XmlTextWriter 中的 CRLF【英文标题】:How can I generate XML with CR, instead of CRLF in XmlTextWriter 【发布时间】: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 【参考方案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 属性。

【讨论】:

以上是关于如何使用 CR 生成 XML,而不是 XmlTextWriter 中的 CRLF的主要内容,如果未能解决你的问题,请参考以下文章

django - 如何在 mysql 中保存“Angela CR Céspedes Rodríguez”而不是“Angela CR Céspedes Rodríguez”

ubuntu 下用python写了个生成动态壁纸的脚本,如果通过代码实现使用这个xml,而不是通过桌面->背景->添加

有没有办法让 Aginity Workbench 编写 Unix 文件而不是 Windows 文件(仅 LF 而不是 CR\LF)

XMLWriterTraceListener生成文本墙而不是格式化的XML

使用Mysqli从SQL生成XML

如何使用 hibernate.properties 文件而不是 hibernate.cfg.xml