如何使用 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)