2012-03-19 92 views
3

我有一個XmlDocument這樣的:的Xml InnerXml壓痕問題

<Root> 
    <Settings> 
    <PresentationSettings> 
    </PresentationSettings> 
    </Settings> 
</Root> 

當我設置的<PresentationSettings>這個文本InnerXml ...

<Desktop> 
    <WidgetElements> 
    <WidgetElement Name="1"> 
    </WidgetElement> 
    <WidgetElement Name="2"> 
    </WidgetElement> 
    </WidgetElements> 
</Desktop> 

...,輸出文件被保存像這樣:

<Root> 
    <Settings> 
    <PresentationSettings> 
     <Desktop> 
    <WidgetElements> 
    <WidgetElement Name="1"> 
    </WidgetElement> 
    <WidgetElement Name="2"> 
    </WidgetElement> 
    </WidgetElements> 
</Desktop> 
    </PresentationSettings> 
    </Settings> 
</Root> 

看來InnerXml的根(即<Desktop>)從右側縮進列開始,但其餘的InnerXml保留它的原始縮進。我嘗試了很多方法,但他們都給出了完全相同的輸出。我試過的方法是:

  • XmlTextWriterFormatting = Formatting.Indented
  • XmlWriterXmlWriterSettings { Indent = true }
  • 使用上述兩種方法轉換爲XDocument
  • 使用XmlDocumentFragment

任何人都可以指向我的寫作方向嗎?我究竟做錯了什麼?

+0

白色空間是不是在XML顯著 - 爲什麼你想「解決」這個問題? – Oded 2012-03-19 20:52:50

+0

我對事物的完美順序有點堅果。 :P儘管它幾乎不會影響我的應用程序,但我仍然想知道爲什麼會發生這種情況,以及如何修復它。 – Yogesh 2012-03-19 21:06:17

+0

這是因爲空白對XML沒有意義 - 這並不重要,爲什麼浪費代碼和CPU週期呢? – Oded 2012-03-19 21:27:28

回答

2

您應該使用XDocument或XElement,XmlDocument是.Net 2.0又名陳舊。

而是寫:

+0

我知道我可以使用XElement來做到這一點,但是圖書館太大,無法翻譯成4.0。但是,仍然,因爲這是正確的答案,我也知道(:P),我接受它。順便說一下,'pSettings.Add(otherContentXml);'會將'<>'標誌轉換爲<和>。你需要添加一個從字符串傳遞過來的'XElement'。 – Yogesh 2012-03-20 06:54:59