我需要使用适当的缩进XmlDocument
保存一个(Formatting.Indented)
到文件,但是某些带有 child 的节点必须位于一行(Formatting.None)
中。
由于XmlTextWriter
接受整个文档的设置,如何实现呢?
在@Ahmad Mageed的 repo 之后进行编辑:
我不知道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/