我正在尝试基于.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);
}