C# Xml缩进问题

C# Xml缩进问题,c#,xml,xmldocument,indentation,C#,Xml,Xmldocument,Indentation,我有这样一个XmlDocument: <Root> <Settings> <PresentationSettings> </PresentationSettings> </Settings> </Root> <Root> <Settings> <PresentationSettings> <Desktop> <Widg

我有这样一个
XmlDocument

<Root>
  <Settings>
    <PresentationSettings>
    </PresentationSettings>
  </Settings>
</Root>
<Root>
  <Settings>
    <PresentationSettings>
      <Desktop>
  <WidgetElements>
    <WidgetElement Name="1">
    </WidgetElement>
    <WidgetElement Name="2">
    </WidgetElement>
  </WidgetElements>
</Desktop>
    </PresentationSettings>
  </Settings>
</Root>
…,输出文件的保存方式如下:

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

似乎
InnerXml
(即
)的根从右缩进列开始,但
InnerXml
的其余部分保留了其原始缩进。我尝试了很多方法,但它们都给出了完全相同的输出。我尝试的方法是:

  • XmlTextWriter
    带有
    Formatting=Formatting.Indented
  • XmlWriter
    带有
    XmlWriterSettings{Indent=true}
  • 使用上述两种方法转换为
    XDocument
  • 使用
    XmlDocumentFragment

有人能给我指一下写作的方向吗?我做错了什么?

您应该使用XDocument或XElement,XmlDocument是.Net 2.0,也就是过时的

改为写:

XElement root = XElement.Parse("<Root><Settings><PresentationSettings></PresentationSettings></Settings></Root>");
XElement pSettings = root.Element("Settings").Element("PresentationSettings");
pSettings.Add(otherContentXml);
root.Save(fileName);
or
string formattedXml = root.ToString();
XElement root=XElement.Parse(“”);
XElement pSettings=root.Element(“设置”).Element(“呈现设置”);
添加(otherContentXml);
root.Save(文件名);
或
string formattedXml=root.ToString();

空白在XML中并不重要-你为什么要“解决”这个问题?我有点痴迷于事情是否井然有序:P虽然它几乎不会影响我的应用程序,但我仍然想知道为什么会发生这种情况,以及如何修复它。之所以会发生这种情况,是因为空白对于XML来说并不重要——这并不重要,为什么要在它上面浪费代码和CPU周期?有时,像浪费代码/时间/CPU周期,或者不影响执行之类的事情并不重要。但是正确的输出是正确的,这就是我的观点。这是正确的输出。我知道我可以使用XElement来完成,但库太大,无法转换为4.0。但是,因为这是正确的答案,我也知道(:P)我接受它。顺便说一句,
pSettings.Add(otherContentXml)
符号转换为和。您需要添加从字符串传递的
XElement