如何将 XML 包装在虚拟根目录下
How to wrap XML under virtual root
我试图在没有根元素的情况下加载 XML。我想使用 LINQ 来 XML.
以下答案:我重新创建了这段代码:
var doc = File.ReadAllText(Path.Combine(Settings.GameFolderPath, path));
var rootedDoc = "<root>" + doc + "</root>";
XDocument correctDoc = XDocument.Parse(rootedDoc);
但我在 XDocument.Parse()
、第 1 行、位置 9 上得到 XML异常“意外的 XML 声明”。使用 File.WriteAllText(path, rootedDoc)
我知道第一行看起来像预期的那样:<root><?xml version="1.0" encoding="utf-16"?>
。它必须以某种方式在我链接的答案中工作,但我不明白如何,你如何在包装原始文件后先保持声明?
这是因为 XML 版本 1.0 指定 XML 声明(<? ... ?>
部分)是可选的,这意味着,链接的答案可能只是忽略了它,或者只是忽略了它未使用包含它的 XML 进行测试。最简单的部分是在解析文件之前删除 XML 声明,如下所示:
xml = xml.TrimStart("<?xml version=\"1.0\" encoding=\"utf-16\"?>");
xml = $"<root>{xml}</root>";
如果 XML 是手动创建的/可以在将其传递给代码之前手动编辑,您始终可以手动将其删除,但我不推荐这样做,因为那样的话您的程序会崩溃正在摄取(否则*)有效的 XML 个文件。
*XML 具有多个根元素的文件在技术上已经无效 XML 文件
我试图在没有根元素的情况下加载 XML。我想使用 LINQ 来 XML.
以下答案:我重新创建了这段代码:
var doc = File.ReadAllText(Path.Combine(Settings.GameFolderPath, path));
var rootedDoc = "<root>" + doc + "</root>";
XDocument correctDoc = XDocument.Parse(rootedDoc);
但我在 XDocument.Parse()
、第 1 行、位置 9 上得到 XML异常“意外的 XML 声明”。使用 File.WriteAllText(path, rootedDoc)
我知道第一行看起来像预期的那样:<root><?xml version="1.0" encoding="utf-16"?>
。它必须以某种方式在我链接的答案中工作,但我不明白如何,你如何在包装原始文件后先保持声明?
这是因为 XML 版本 1.0 指定 XML 声明(<? ... ?>
部分)是可选的,这意味着,链接的答案可能只是忽略了它,或者只是忽略了它未使用包含它的 XML 进行测试。最简单的部分是在解析文件之前删除 XML 声明,如下所示:
xml = xml.TrimStart("<?xml version=\"1.0\" encoding=\"utf-16\"?>");
xml = $"<root>{xml}</root>";
如果 XML 是手动创建的/可以在将其传递给代码之前手动编辑,您始终可以手动将其删除,但我不推荐这样做,因为那样的话您的程序会崩溃正在摄取(否则*)有效的 XML 个文件。
*XML 具有多个根元素的文件在技术上已经无效 XML 文件