[英]XmlDocument and line breaks
我解析使用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
在MSDN上的“ 數據一致性”部分列出了它確實進行了規范化。
當我在參考源中查找Load方法時 ,似乎XmlDocument的重載便捷Load
方法使用XmlTextReader
,其Normalization
屬性默認為false 。
當我查看.NET Core的XmlDocument
版本時 , Load
函數改為使用普通的XmlReader
。 這可能表明內部代碼已在某些時候進行了更改,並且可能解釋了您為看似相似的代碼所見過的某些怪異行為。
XmlDocument
這種行為未在MSDN上記錄,這就是為什么我在計算摘要時碰到它的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.