2010-11-11 94 views
2

我試圖從一個字符串中加載一個XDocument,該字符串包含其文本節點中含有過多空白的XML元素。從我對XDocument.Parse方法的MSDN的理解中,它應該不保留空格。XDocument.Parse當不要求時保留空格

爲什麼在這個簡單的例子中,空白仍然存在?

string xml = "<doc> <node>this should be collapsed</node> </doc>"; 
XDocument doc = XDocument.Parse(xml); 
Console.WriteLine(doc.Root.Element("node").Value); 

Console.WriteLine調用的結果是每個單詞之間有兩個空格的短語。我預計每個人之間只有一個空間。

+2

我認爲這是「不是」保留元素之間的空白,但不是在文本節點內(即,包含僅由空白組成的文本節點被壓縮) – Aren 2010-11-11 00:52:23

回答

1

「不保留空白」意味着在加載XDocument時將忽略包含只有空白的任何文本節點。

你的XML字符串可以通過下面的樹表示:

doc 
|--#text - " " 
|--node 
| |--#text - "this should be collapsed" 
|--#text - " " 

如果你檢查的doc.Root.Value的內容,你會看到字符串

"this should be collapsed" 

如果改爲加載的字符串,而「保留空白「,

XDocument doc = XDocument.Parse(xml, LoadOptions.PreserveWhitespace); 

並再次檢查t他的內容doc.Root.Value,你會看到字符串

" this should be collapsed " 
+1

那麼,如何將文本節點內部的空白摺疊爲不僅包含空白的文本節點?我正在尋找類似於HTML的行爲,將所有空格像空格一樣對待,並將所有連續空格摺疊爲一個空格。這是可能的內置API,或者我不得不採取通過自定義方法傳遞每個文檔中的每個節點來做到這一點? – ismith 2010-11-11 21:56:28