c# - XDocument 将制表符更改为空格

标签 c# .net linq-to-xml

我有一个简化后的 xml 文档,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Node1 separator="    " />

有一个\t作为属性值。

执行这段代码时

var path = @"C:\test.xml";
var doc = XDocument.Load(path);
doc.Save(path);

属性值由制表符变为空格。

<?xml version="1.0" encoding="utf-8"?>
<Node1 separator=" " />

有没有办法保留原始值,因为它必须是制表符?

最佳答案

这是 XML:Attribute-Value Normalization 的“属性中的 XML 空白规范化”部分这是处理 XML 文档时的默认行为。

For a white space character (#x20, #xD, #xA, #x9), append a space character (#x20) to the normalized value

您应该能够使用 XmlTextReader.Normalization属性描述 here . XmlDocument 可以从阅读器加载 XmlDocument.Load .

var path = @"C:\test.xml";
XmlDocument doc = new XmlDocument();
XmlTextReader reader = new XmlTextReader(path);
doc.Load(reader);
var s = doc.SelectSingleNode("*/@*").InnerText;
Console.WriteLine("|{0}|, {1}", (int)s[0], s.Length); // prints 9 - ASCII code of tab
doc.Save(path);

关于c# - XDocument 将制表符更改为空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16767481/

相关文章:

c# - 我不了解 volatile 和 Memory-Barrier 的是

c# - .NET 文件解密 - 错误数据

c# - 在 Uri TryCreate 完美运行时使用 Uri IsWellFormedUriString

c# - linq 不会遍历列表

c# - 在 C# 3.0 中缩小 XML 的最佳方法

c# - EF 迁移期间未找到所需属性 "type"

c# - System.Data.SQLite 设计时与 VS 2013 的集成

.net - 从 .NET 程序与 ffmpeg 交互 - 写入输入

c# - System.Reflection.Emit 的线程安全性如何?

c# - XDocument.Save() 某些内容阻止文件