C# Linq XML InvalidOperationException



我正在尝试基于.csv文件创建一个XML文件。我想我可以使用我的旧方法来读取.csv文件并替换一些部分。但是我得到一个例外说:

无效操作异常

这是我的代码:

    public void LoadFile() {
        XDocument outputDocument = new XDocument();
        outputDocument.Add(new XElement("Inventory"));
        using (var fstream = File.OpenRead(FilePathProducts))
        using (var fileReader = new StreamReader(fstream)) {
            while (!fileReader.EndOfStream) {
                var readLine = fileReader.ReadLine();
                var words = readLine.Split(';');

                outputDocument.Add(
                    new XElement("Item",
                        new XElement("Name", words[1]),
                        new XElement("Count", words[3]),
                        new XElement("Price", words[4]),
                        new XElement("Comment", "<Missing Value>"),
                        new XElement("Artist", "<Missing Value>"),
                        new XElement("Publisher", "Nintendo"),
                        new XElement("Genre", "<Missing Value>"),
                        new XElement("Year", words[0]),
                        new XElement("ProductID", words[2])
                    )
                );
            }
        }
        outputDocument.Save(FilePathResult);
    }

它说了一些关于"创建了一个结构错误的文档"(粗略翻译(。

当我尝试删除循环时,输出文件仅显示一个自关闭的库存标签。我希望它是一个打开和关闭的标签。所以我猜上面代码的第 3 行有问题。

您正在尝试将Item元素直接追加到 XML 文档中,并且不允许 XML 文档具有多个根元素。这就是您收到错误的原因。

我认为您实际上想将它们添加到 Inventory 元素中,在这种情况下,您应该这样做:

public void LoadFile() {
    var outputDocument = new XDocument();
    var inventory = new XElement("Inventory");
    outputDocument.Add(inventory);
    using (var fstream = File.OpenRead(FilePathProducts))
    using (var fileReader = new StreamReader(fstream)) {
        while (!fileReader.EndOfStream) {
            var readLine = fileReader.ReadLine();
            var words = readLine.Split(';');

            inventory.Add(
                new XElement("Item",
                    new XElement("Name", words[1]),
                    new XElement("Count", words[3]),
                    new XElement("Price", words[4]),
                    new XElement("Comment", "<Missing Value>"),
                    new XElement("Artist", "<Missing Value>"),
                    new XElement("Publisher", "Nintendo"),
                    new XElement("Genre", "<Missing Value>"),
                    new XElement("Year", words[0]),
                    new XElement("ProductID", words[2])
                )
            );
        }
    }
    outputDocument.Save(FilePathResult);
}

最新更新