c# - Xml InnerXml 缩进问题

标签 c# xml xmldocument indentation

我有一个 XmlDocument像这样:

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

当我设置 InnerXml<PresentationSettings>用这个文本...

<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 .

任何人都可以指出我的写作方向吗?我做错了什么?

最佳答案

您应该使用 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();

关于c# - Xml InnerXml 缩进问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777742/

相关文章:

c# - 获取无线网络强度

c# - 为什么重定向标准输入会导致 stdout 不打印到新的控制台进程?

c# - Keep-Alive 出现在 Debian/Mono 的 HTTP header 中 - 而不是 Windows

php - 如何仅使用 PHP 创建有效的 XML 树根元素?

C# 根据不需要的属性值列表从 XMLDocument 中删除整个元素

c# - 将 Xml 转换为字符串。每个标签换行?

.net - XmlDocument.ImportNode 的 XDocument 等效项是什么?

c# - 可序列化与数据契约与 WCF 服务中什么都没有

java - 从 XML 文件 java 中读取深层的特定元素

python - 从解析的 XML 文件中配对子元素和嵌套子元素的值