簡體   English   中英

XmlDocument和換行符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM