2010-04-29 65 views
4

我「手工」編寫XML文件(即不包含LINQ to XML),有時包含一個包含單個空格字符的打開/關閉標記。在查看生成的文件,所有這些問題似乎是正確的,下面的例子...C#LINQ to XML缺少空格字符

<Item> 
    <ItemNumber>3</ItemNumber> 
    <English> </English> 
    <Translation>Ignore this one. Do not remove.</Translation> 
</Item> 

...這樣做的原因是多方面的,並無關緊要,它完成。

後來,我用C#程序中使用LINQ到XML讀取文件回並提取記錄...

XElement X_EnglishE = null; // This is CRAZY 
foreach (XElement i in Records) 
{ 
    X_EnglishE = i.Element("English"); // There is only one damned record! 
} 
string X_English = X_EnglishE.ToString(); 

...和測試,以確保它是從數據庫中記錄持平。我發現一個變化,處理I加入到看發生了什麼事的項目在現場有一個空格字符...

+E+ Text[3] English source has been altered: 
    Was: >>> <<< 
    Now: >>><<< 

...的>>>和< < <部件時,(很難看到空格字符)。我已經擺弄這個,但不明白爲什麼會這樣。這不是絕對的關鍵,因爲該字段沒有被使用(但),但是我不能相信C#或LINQ或者其他任何正在做這件事的東西,如果我不明白爲什麼它會這樣。那麼,這是什麼以及爲什麼?

+0

愛在你的代碼中的註釋。 – juharr 2010-04-29 13:34:44

回答

2

你需要保留空白加載XML字符串時:

XDocument doc = XDocument.Parse(@" 
<Item> 
    <ItemNumber>3</ItemNumber> 
    <English> </English> 
    <Translation>Ignore this one. Do not remove.</Translation> 
</Item>", LoadOptions.PreserveWhitespace); 

string X_English = (string)doc.Root.Element("English"); 

// X_English == " " 
+0

讓我走向正確的方向。問題可以被認爲是關閉的。 – Fossaw 2010-05-03 09:54:35

2

這看起來和我在HTML中獲得的行爲一樣,其中前導/後綴空格被摺疊到自身中,從而導致您有空字符串。我認爲如果你把單個空間放入一個CDATA塊中,那可能會解決它。

2

在XML中,空格(如空格)在標記之前和之後被忽略。解析後的XML會忽略這個單獨的空間,因爲它被視爲格式化(因爲它沒有圍繞它的文本),所以它不會出現在輸出中。