XML InnerXml缩进问题

3
我有一个像这样的XmlDocument:
<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
有谁能指点我正确的方向吗?我做错了什么?

XML中的空格不重要 - 你为什么要“解决”这个问题? - Oded
我对事情的完美秩序有点过于执着。:P 虽然这几乎不会影响我的应用程序,但我仍然想知道为什么会发生这种情况,以及如何解决它。 - Yogesh
这是因为在XML中空格不重要 - 它并不重要,所以为什么要浪费代码和CPU周期呢? - Oded
有时候浪费的代码、时间、CPU周期或者对执行没有影响并不重要,但正确的输出却是至关重要的。 - Yogesh
这就是我的观点。这确实是正确的输出。 - Oded
1
对我来说,“正确”的输出意味着“属性缩进的XML”。我提出这个问题并不是为了讨论观点,而是想知道代码为什么无法正确缩进。请勿误解,但您现在陷入了无用的争论中。 - Yogesh
1个回答

2

你应该使用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来完成它,但该库太大了无法转换为4.0版本。但是,既然这是正确的答案,我也知道(:P),我会接受它。 BTW,“pSettings.Add(otherContentXml);”将会把<>符号转换成<和>。您需要添加从字符串传递的“XElement”。 - Yogesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接