c# - 使用 XmlWriter 以迭代方式构建 XML 文件

标签 c# .net xml xmlwriter

我希望能够使用 XmlWriter(C#、.NET)创建一个 XML 文档,其中多次调用一个生成 XML 的方法,然后一次调用关闭所有内容的 final方法离开。当我多次尝试调用此方法时:

private void SiblingGenerator(List<XmlNode> XMLList, XmlWriter textWriter,
    string newPath, FileInfo fi)
{
    if (fi.Length == 0)
    {
        MessageBox.Show("file doesn't exist");

        textWriter.WriteStartDocument();
        textWriter.WriteStartElement("batch");
        //...
    }

    // ...
}

...它返回一个错误,指出 WriteStartDocument 需要成为第一个调用

似乎对 textWriter 的调用实际上并没有被写入,因为在每次后续调用中文档都会重新开始。

谁能告诉我为什么会这样?

最佳答案

XmlWriter 只能转发,不能重复使用。您不应在此类的同一个实例上多次调用 WriteStartDocument。因为它是您的方法的参数,所以调用者必须负责处理编写器的生命周期。

using (var writer = XmlWriter.Create("foo.xml"))
{
    SiblingGenerator(XMLList, writer, newPath, fi);
}

如果您需要多次重用 SiblingGenerator 函数,那么您可能希望将 WriteStartDocument 方法的调用外部化:

using (var writer = XmlWriter.Create("foo.xml"))
{
    writer.WriteStartDocument();
    SiblingGenerator(XMLList, writer, newPath, fi);
    SiblingGenerator(XMLList, writer, newPath, fi);
    ...
    writer.WriteEndDocument();
}

关于c# - 使用 XmlWriter 以迭代方式构建 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4580774/

相关文章:

c# - Entity Framework 数据库优先 如何更改实体以使其从基类派生

java - 在不填充默认属性的情况下在 JAVA SAX 中解析 XML

c# - 将数据库项与 List<string> 输入进行比较

c# - 形成 Load() 或不形成 Load()

c# - 从 XmlNode 中提取 'text' 值的最佳方法?

c# - 这个 boolean 迭代有什么问题?

c# - 如何允许 ComboBox 具有不在 ItemsSource 中的选定值?

c# - C# 3.0 中 Windows 本地用户帐户的身份验证

xml - : 'identifiedType' 的重复定义

xml - 将 UTF8 数据导出到 Excel 的最佳方法是什么?