Solución error método Load de XDocument: ‘.’, valor hexadecimal 0x00, es un carácter no válido.
Siempre cargaba los documentos XML del streamReader de esta forma:
XDocument myXmlDocument = XDocument.Load(myReader, LoadOptions.None); |
Hasta que hace unos días me salía un error con un documento que decía:
‘.’, valor hexadecimal 0x00, es un carácter no válido. Línea XXX, posición XX. (casualmente siempre me indicaba la última línea)
Bueno… y como podía ser esto posible… si yo veía el XML correcto, muy bien a ciencia cierta no lo se pero encontré una solución que al menos lo que hace es eliminar todos los caracteres hexadecimales de la cadena de carga de XML.
Utilizando esta función en mi caso:
public static string CleanInvalidXmlChars(string text) { // From xml spec valid chars: // #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] // any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. string re = @"[^x09x0Ax0Dx20-xD7FFxE000-xFFFDx10000-x10FFFF]"; return Regex.Replace(text, re, ""); } |
Y cambiando el Load por el Parse:
XDocument myXmlDocument = XDocument.Parse( CleanInvalidXmlChars(myReader.ReadToEnd()), LoadOptions.None); |