【发布时间】:2021-11-20 12:12:18
【问题描述】:
我正在尝试加载没有根元素的 XML。我想使用 LINQ to XML。
以下回答:https://stackoverflow.com/a/18186317/16514891 我重新创建了这段代码:
var doc = File.ReadAllText(Path.Combine(Settings.GameFolderPath, path));
var rootedDoc = "<root>" + doc + "</root>";
XDocument correctDoc = XDocument.Parse(rootedDoc);
但我在XDocument.Parse(),第 1 行,位置 9 上收到 XMLException "Unexpected XML declaration"。使用 File.WriteAllText(path, rootedDoc) 我知道第一行看起来像预期的那样:<root><?xml version="1.0" encoding="utf-16"?>。它必须以某种方式在我链接的答案中起作用,但我不明白如何,你如何在包装原始文件后首先保持声明?
【问题讨论】:
-
这不是一个有效的 XML 文档。 XML 声明
?xml version="1.0" encoding="utf-16"?>必须位于文档顶部,在<root>之前 -
XML 1.0 版声明 XML 声明是可选,这意味着链接的答案并不关心 XML 文件是否包含它。但是由于您的 XML 确实包含它,它会抛出一个异常,因为如果它存在,它必须位于文档的顶部。最简单的方法可能是删除
xml.IndexOf("<?")和xml.IndexOf("?>")之间的所有内容 -
好的,谢谢。所以我只是在包装之前从原始文件中删除了声明。似乎正在工作,在最坏的情况下,我可以在新文件的开头添加声明。
标签: c# linq-to-xml