c# - 如何保存具有多个缩进设置的 XmlDocument?

标签 c# .net indentation xmldocument xmltextwriter

我需要存一个XmlDocument以适当的缩进归档 (Formatting.Indented)但一些节点及其子节点必须在一行中 (Formatting.None) .

XmlTextWriter 以来如何实现这一目标接受整个文档的设置?


根据@Ahmad Mageed 的回复进行编辑:

我不知道 XmlTextWriter 设置可以在写入期间修改。这是个好消息。

现在我正在以这种方式保存 xmlDocument(它已经充满了节点,具体来说它是 .xaml 页面):

XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8);
writer.Formatting = Formatting.Indented;
xmlDocument.WriteTo(writer);
writer.Flush();
writer.Close();

当然,它可以在所有节点中启用缩进。处理所有 <Run> 时我需要禁用缩进节点。

在您的示例中,您“手动”写入 XmlTextWriter。 有没有一种简单的方法可以遍历所有 xmlDocument 节点并将它们写入 XmlTextWriter 以便我可以检测到 <Run>节点?或者我是否必须编写某种递归方法来访问当前节点的每个子节点?

最佳答案

“因为 XmlTextWriter 接受整个文档的设置”是什么意思? XmlTextWriter 的设置可以修改,这与 XmlWriter 的设置不同。同样,您如何使用 XmlDocument?请发布一些代码来展示您的尝试,以便其他人更好地理解问题。

如果我没理解错的话,您可以修改 XmlTextWriter 的格式来影响您希望出现在一行中的节点。完成后,您可以将格式重置为缩进。

例如,像这样:

XmlTextWriter writer = new XmlTextWriter(...);
writer.Formatting = Formatting.Indented;
writer.Indentation = 1;
writer.IndentChar = '\t';

writer.WriteStartElement("root");

// people is some collection for the sake of an example
for (int index = 0; index < people.Count; index++)
{
    writer.WriteStartElement("Person");

    // some node condition to turn off formatting
    if (index == 1 || index == 3)
    {
        writer.Formatting = Formatting.None;
    }

    // write out the node and its elements etc.
    writer.WriteAttributeString("...", people[index].SomeProperty);
    writer.WriteElementString("FirstName", people[index].FirstName);

    writer.WriteEndElement();

    // reset formatting to indented
    writer.Formatting = Formatting.Indented;
}

writer.WriteEndElement();
writer.Flush();

关于c# - 如何保存具有多个缩进设置的 XmlDocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2035252/

相关文章:

c# - 使用C#登录到Ebay

c# - 创建相关实体的责任

c# - 用户做出选择后保持 WPF 弹出窗口打开

html - 输出的 HTML 中的 Rails 缩进会发生什么情况?

vim - 如何在 GUI 中的 XML 文件上使用 Windows 版 VIM 中的 gg=G 命令?

c# - 为什么总是调用终结器?

c# - 有没有办法对数组的一个成员以外的所有成员进行操作?

c# - 如何使用 TreeView 连接 Silverlight 和 MVVM 中的 View ?

c# - 有没有办法实现和使用 "NOT null coalescing"运算符?

visual-studio - 如何在VS2008中自动缩进代码?