2012-03-19 96 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