gpt4 book ai didi

c# - XmlDocument 和换行符

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:11 27 4
gpt4 key购买 nike

我使用 XmlDocument.Load() 解析从嵌入式资源中读取的 XML 文本。有包含多行的文本元素。我读过 XML 解析器应该规范化换行符,将 CR-LF 对转换为单个 LF 字符。但我发现在某些情况下它不会。更奇怪的是,有时它会进行规范化,我无法弄清楚这种行为取决于什么。我们根据这种行为进行了一些单元测试,它们在某些机器上通过而在其他机器上失败,并且同一台机器上的不同程序表现不同。我缺少什么?

这是一个简单的测试程序,在我的例子中,它始终显示 CR 和 LF 都按字面意义保留。 (但我提到的单元测试在同一台机器上通过,表明换行已标准化)。设置 PreserveWhitespace 没有任何区别。

 asm = Assembly.GetExecutingAssembly();
res = asm.GetManifestResourceStream("test.xml");
var doc = new XmlDocument();
var reader = new StreamReader(res);
doc.Load(reader);
var root = doc.DocumentElement;
var text = root.InnerText;
var cr = text.IndexOf('\r');
var lf = text.IndexOf('\n');
Console.WriteLine("CR:{0} LF:{1}", cr, lf);

最佳答案

如果你想要规范化,你必须传递一个 XmlReader XmlDocument.Load 函数的实例确保:

asm = Assembly.GetExecutingAssembly();
res = asm.GetManifestResourceStream("test.xml");
var doc = new XmlDocument();
var reader = new StreamReader(res);
var xmlreader = XmlReader.Create(reader)
doc.Load(xmlreader);

XmlReader 列出它确实在 Data conformance section on MSDN 中进行规范化.

当我查找 Load methods in the reference source 时, 似乎 XmlDocument 的重载便利 Load 方法使用了 XmlTextReader,其 Normalization property defaults to false .

当我查看 .NET Core's version of XmlDocument 时, Load 函数使用普通的 XmlReader 代替。这可能表明内部代码在某个时候发生了更改,并且它可能解释了您在明显相似的代码中看到的一些奇怪行为。

MSDN 上没有记录 XmlDocument 的这种行为,这就是为什么我在计算摘要时碰到它的原因。

关于c# - XmlDocument 和换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27157589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com