2012-11-16 11 views
0

我有百萬美元的問題......定製格式化C#的XmlDocument

此代碼:

XmlNode columnNode = null;        
columnNode = xmlDoc.CreateElement("SYSID"); 
columnNode.InnerText = ""; // Empty string 
newRowNode.AppendChild(columnNode); 

...做到這一點:

<SYSID> 
</SYSID> 

,我想有此字符串爲空時:

<SYSID></SYSID> 

是t這裏有解決方案

+3

您應該將'XmlDocument.PreserveWhitespace'設置爲false,但是這將適用於所有節點 –

+0

@NaNNy爲什麼你在這裏發表評論,而不是在下面提供答案? – Marcus

+1

,因爲這不是他正在尋找的答案 –

回答

2

如果您有另一個需要該格式的工具,那麼另一個工具是錯誤的 - 它不能讀取XML。所以如果你有控制其他工具,我會建議修復它,而不是試圖強制你的代碼匹配它。

如果你不能修復的其他工具...

如果你只是建立一個文件將它寫入到磁盤上,然後就可以使用流和元素直接寫自己(那樣簡單文本)。這將比使用XmlDoc更快(並且可能更容易)。

由於上改進,您可以使用一個的XmlWriter寫的元素,但是當你去寫一個空元素,寫原始文本的流(即writer.WriteRaw(」 <SYSID> </SYSID > \ n「)),以便控制這些特定元素的格式。

如果您需要構建一個內存中的XmlDocument,那麼在很大程度上您必須忍受它在要求它序列化到磁盤時所使用的格式(除了像PreserveWhitespace這樣的基本設置,您要求文檔處理存儲信息,因此您失去了對XmlDocument封裝的功能的大量控制)。在這種情況下,我能想到的最好的建議是將XmlDocument寫入一個MemoryStream,然後後處理該內存流以從空元素中刪除換行符。 (Yuck!)

+0

好吧傑森,謝謝。所以正確的XML格式是當值爲空時開始新行? – Marshall

+0

XML通常會忽略空格,因此通常會忽略元素開始標記和結束標記之間的任何換行符 - 所以''和' \ n'(其中\ n是換行符)或「」(空元素)是通常認爲是等同的(但是,如果您真的想從文檔中檢索空白,可以打開XmlDoc中的PreserveWhitespace選項) –