如何使用多个缩进设置保存XmlDocument?

时间:2010-01-09 22:42:16

标签: c# .net indentation xmldocument xmltextwriter

我需要将一个XmlDocument保存到文件中并使用适当的缩进(Formatting.Indented),但有些子节点必须在一行中(Formatting.None)

如果XmlTextWriter接受整个文档的设置,如何实现?


在@Ahmad Mageed's resposne之后编辑:

我不知道在写入过程中可以修改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>个节点?或者我是否必须编写某种递归方法,该方法将转发给当前节点的每个子节点?

1 个答案:

答案 0 :(得分:3)

你是什么意思“因为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();