XDocument can';在C#LINQ中加载1.1版本的xml?

XDocument can';在C#LINQ中加载1.1版本的xml?,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,XDocument.Load在使用版本为1.1而不是1.0的XML文件时引发异常: Unhandled Exception: System.Xml.XmlException: Version number '1.1' is invalid. Line 1, position 16. 未处理的异常:System.Xml.XmlException:版本号“1.1”无效。第1行,位置16。 是否有任何干净的解决方案来解决错误(不带正则表达式)并加载文档?初始反应,只是为了确认我可以复制以下内容: us

XDocument.Load
在使用版本为1.1而不是1.0的XML文件时引发异常:

Unhandled Exception: System.Xml.XmlException: Version number '1.1' is invalid. Line 1, position 16. 未处理的异常:System.Xml.XmlException:版本号“1.1”无效。第1行,位置16。
是否有任何干净的解决方案来解决错误(不带正则表达式)并加载文档?

初始反应,只是为了确认我可以复制以下内容:

using System;
using System.Xml.Linq;

class Test
{   
    static void Main(string[] args)
    {
        string xml = "<?xml version=\"1.1\" ?><root><sub /></root>";
        XDocument doc = XDocument.Parse(xml);
        Console.WriteLine(doc);
    }
}
从.NET 4.6开始,它仍然失败。

“1.0版”在标准.NET XML库中的不同位置进行了硬编码。例如,您的代码似乎与System.Xml.XmlTextReaderImpl.ParseXmlDeclaration(bool)中的这一行有冲突:

我对XDocument.Save也有类似的问题,拒绝保留1.1。这是同一类型的东西——System.Xml方法中的硬编码“1.0”


我找不到仍然使用标准库的文档。

您可以跳过第一行,然后使用XDocument.Parse加载XML。像这样:

                var lines = File.ReadAllLines(xmlFilename).ToList();
                lines[0] = String.Empty;
                var xdoc = XDocument.Parse(string.Join("", lines));

有什么例外?你能发布xml吗?默认的一致性级别是Document,根据MSDN的说法,它需要一个XML1.1文档:问题是对的,你有一个干净的解决方案(没有正则表达式)。我得出了同样的结论。。。(虽然我没有检查4.0;+1以获得额外的工作)检查XmlReader.Create的XmlReaderSettings,ConformanceLevel.Document声明它需要一个XML 1.0文档。已确认仍然以与.NET 4.5和.NET 4.5.1相同的方式失败。它在.NET 4.6 RC上失败。
 if (!XmlConvert.StrEqual(this.ps.chars, this.ps.charPos, charPos - this.ps.charPos, "1.0"))
                var lines = File.ReadAllLines(xmlFilename).ToList();
                lines[0] = String.Empty;
                var xdoc = XDocument.Parse(string.Join("", lines));