2009-05-26 7 views
9

XDocument.Load zgłasza wyjątek przy użyciu pliku XML w wersji 1.1 zamiast 1,0:XDocument nie może załadować xml z wersją 1.1 w C# LINQ?

 
Unhandled Exception: System.Xml.XmlException: Version number '1.1' is invalid. Line 1, position 16. 

Wszelkie czyste rozwiązań rozwiązać błędu (bez regex) i załadować dokument?

+0

Jaki jest wyjątek? czy możesz opublikować xml? – Beatles1692

+0

Sprawdź odpowiedź Jona Skeeta: –

+0

Domyślnie ConformanceLevel to Document, który zgodnie ze stanem MSDN potrzebuje dokumentu XML 1.1: http://msdn.microsoft.com/en-us/library/h2344bs2.aspx – user7116

Odpowiedz

5

Początkowa reakcja, żeby potwierdzić, że mogę odtworzyć to:

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); 
    } 
} 

wyniki w tej wyjątek:

Unhandled Exception: System.Xml.XmlException: Version number '1.1' is invalid. Line 1, position 16. 
    at System.Xml.XmlTextReaderImpl.Throw(Exception e) 
    at System.Xml.XmlTextReaderImpl.Throw(String res, String arg) 
    at System.Xml.XmlTextReaderImpl.ParseXmlDeclaration(Boolean isTextDecl) 
    at System.Xml.XmlTextReaderImpl.Read() 
    at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options) 
    at System.Xml.Linq.XDocument.Parse(String text, LoadOptions options) 
    at System.Xml.Linq.XDocument.Parse(String text) 
    at Test.Main(String[] args) 

To nadal nie jak z .NET 4.6.

+1

Problem jest właściwy, czy masz czyste rozwiązanie (brak regex). –

+0

Zawarłem to samo ... (chociaż nie sprawdziłem 4.0, +1 dla dodatkowego wysiłku) –

+2

Przeglądanie XmlReader.Create dla XmlReaderSettings, ConformanceLevel.Document stwierdza, że ​​potrzebuje dokumentu XML 1.0. – user7116

5

"Wersja 1.0" jest zakodowana na stałe w różnych miejscach w standardowych bibliotekach XML .NET. Na przykład, kod wydaje się być objętych faul tej linii w System.Xml.XmlTextReaderImpl.ParseXmlDeclaration (bool):

if (!XmlConvert.StrEqual(this.ps.chars, this.ps.charPos, charPos - this.ps.charPos, "1.0")) 

Miałem podobny problem z XDocument.Save odmowę zachować 1.1. To był ten sam typ rzeczy - zakodowany "1.0" w metodzie System.Xml.

Wciąż nie mogłem znaleźć wokół tego, które wciąż używało standardowych bibliotek.

Powiązane problemy