2009-05-26 10 views
9

XDocument.Load se emite una excepción cuando se utiliza un archivo XML con la versión 1.1 en lugar de 1.0:XDocument no puede cargar xml con la versión 1.1 en C# LINQ?

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

Cualquier soluciones limpias para resolver el error (sin expresiones regulares) y cargar el documento?

+0

¿Cuál es la excepción? puedes publicar el xml? – Beatles1692

+0

Compruebe la respuesta de Jon Skeet –

+0

El nivel de conformidad predeterminado es el documento, que según MSDN afirma que necesita un documento XML 1.1: http://msdn.microsoft.com/en-us/library/h2344bs2.aspx – user7116

Respuesta

5

reacción inicial, sólo para confirmar que pueda reproducir este:

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

Los resultados en esta excepción:

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) 

Todavía está en su defecto a partir de .NET 4.6.

+1

El problema es correcto, tienes una solución limpia (sin expresiones regulares). –

+0

Concluí lo mismo ... (aunque no revisé 4.0; +1 por esfuerzo extra) –

+2

Revisando XmlReader.Create para XmlReaderSettings, ConformanceLevel.Document indica que necesita un documento XML 1.0. – user7116

5

La "Versión 1.0" está codificada en varios lugares en las bibliotecas .NET XML estándar. Por ejemplo, el código parece estar cayendo a falta de esta línea en System.Xml.XmlTextReaderImpl.ParseXmlDeclaration (bool):

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

tuve un problema similar con XDocument.Save negarse a mantener 1.1. Era el mismo tipo de cosa: un "1.0" codificado en un método System.Xml.

No pude encontrar de todos modos alrededor de él que todavía utilizara las bibliotecas estándar.

Cuestiones relacionadas