我正在尝试基于.csv文件创建XML文件。我想我可以使用我的旧方法来读取.csv文件,只需更换一些部分。但是我得到一个例外说:
出现InvalidOperationException
这是我的代码:
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);
}
它说了一些关于&#34;创建了错误结构化的文档&#34; (粗略翻译。)
当我尝试删除循环时,输出文件仅显示自动关闭的Inventory标记。我希望它是一个开放和密切的标签。所以我猜测上面代码的第3行出了点问题。
答案 0 :(得分: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);
}