使用XAttribute写入XML时如何保留原CR换行格式?
保留XML属性中的原始换行格式(CR)
这个问题其实是.NET中XML序列化的默认行为导致的——当你用XDocument.Save()直接保存时,它会遵循XML规范,自动将属性值里的换行符转换为
(CR/LF的实体表示)。要保留KVP里的原始换行格式,你可以通过自定义XmlWriter的设置来实现。
解决方案步骤:
- 创建
XmlWriterSettings实例,设置NewLineHandling = NewlineHandling.None,这个配置会让XmlWriter完全保留原始的换行符,不做任何转换。 - 使用这个配置创建
XmlWriter,再将你的XDocument写入到文件中。
完整代码示例:
// 你的原始KVP var kvpAttribute = new KeyValuePair<string,string>("rsaKey", @"----RSAKEY---- AWEACAWE123213AWEAWECAWE!AWEAWE AWEAWEAWEAWEAWEQEAWEAWHYTAWEAAA ----END RSA KEY ----"); // 构建XML元素 var element = new XElement("add", new XAttribute("key", kvpAttribute.Key), new XAttribute("value", kvpAttribute.Value)); var doc = new XDocument(element); // 配置XmlWriterSettings var settings = new XmlWriterSettings { NewLineHandling = NewlineHandling.None, Indent = true // 如果需要格式化XML可以保留,不需要的话设为false }; // 使用XmlWriter保存文件 using (var writer = XmlWriter.Create("yourfile.xml", settings)) { doc.Save(writer); }
为什么这个方法有效?
NewLineHandling.None会禁用XmlWriter对换行符的自动处理逻辑,它会原封不动地写入你KVP值里的所有字符,包括原始的CR换行符,不会将其转换为CRLF的实体引用。这样生成的XML属性值就会和你KVP里的原始格式完全一致了。
需要注意的是,虽然这个方法能保留原始换行,但你要确保读取该XML的程序能够正确解析这种格式——毕竟严格来说,XML属性里的换行符按照规范是会被处理的,但如果读取程序有特殊要求,这个方案就能满足你的需求。
内容的提问来源于stack exchange,提问作者Dannys
相关产品推荐
相关产品推荐

