2010-02-17 17 views
23

Estoy analizando algunos XML en C#. Lo obtengo de una base de datos y, por lo tanto, lo convierto en un MemoryStream antes de leerlo con un XmlTextReader. El problema es que recibo este error: Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 1, position 3. A continuación está mi XML y mi código para leerlo (está saliendo de la base de datos, no hay primer carácter en blanco). ¿Alguna sugerencia?El nombre no puede comenzar con el carácter ''

XML:

<? xml version="1.0" encoding="utf-8" ?> 
<form> 
    <e order="0" type="custom" name="test"> 
     <fi type="text" /> 
     <o /> 
    </e> 
    <e order="1" type="zip" /> 
    <e order="2" type="state" /> 
</form> 

C#:

byte[] byteArray = new byte[formXml.Length]; 
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
byteArray = encoding.GetBytes(formXml); 
MemoryStream xmlStream = new MemoryStream(byteArray); 

XmlTextReader xmlReader = new XmlTextReader(xmlStream); 
while (xmlReader.Read()) 
{ 
    if (xmlReader.HasValue) 
    { 
     returnString += xmlReader.Depth.ToString(); 
    } 
} 

pensé que podría ser la codificación, pero lo he intentado por UTF8 y ASCII y no puede encontrar nada.

+1

BTW, a menos que todavía esté usando .NET 1.1, debe usar 'XmlReader.Create()' en lugar de 'new XmlTextReader()'. –

+0

No permite caracteres especiales .. –

Respuesta

22

Sí, debe eliminar el espacio entre <? y xml.

<?xml version="1.0" encoding="utf-8" ?> 
<form> 
    <e order="0" type="custom" name="test"> 
     <fi type="text" /> 
     <o /> 
    </e> 
    <e order="1" type="zip" /> 
    <e order="2" type="state" /> 
</form> 

Here tienen las especificaciones XML correspondientes.

+5

Y el mensaje de error es (por una vez) completamente acertado sobre la ubicación del problema. – AakashM

3

Retire el primer espacio en el documento:

<?xml version="1.0" encoding="utf-8"?> 
5

Su mensaje de error es bastante explícito, tiene un error en posn 3 en la línea 1. Trate <?xml - no hay espacio.

7

Otra fuente común de este error es cuando el XmlReader intenta leer sus scripts como xml. Esa es una buena razón para comenzar a comentar guiones después de las etiquetas de guión. Seguirán ejecutándose:

<script language="javascript" type="text/javascript"> 
<!-- 
    function myFunction() { 
    } 
    ... 
--> 
</script> 
+0

Ojalá supiera esto hace 2 días, ¡gracias! – Julian

0

Recibo el mismo error al leer un archivo XML.

Resultó que tenía un carácter errado < en mi archivo.

Estaba comentando ciertos nodos secundarios y al borrar una de las etiquetas de comentarios, dejé < en el archivo. Apareció el mensaje de error "El nombre no puede comenzar con el carácter '\ r'" y esta pregunta fue el resultado principal de google para esa búsqueda exacta.

<node> 
    <!-- <child /> -->< 
    <child /> 
    <child /> 
</node> 
0

Tuve muchos errores debido a esto. Asegúrate de no tener espacios. Hay dos lugares donde eliminé los espacios que me funcionaron.

fue:

xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" 

lo que funcionó:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

Había un espacio aquí también: < abc: def>. Elimine todos los espacios alrededor del < y el>.

1

Mi error en el mismo caso fue que el archivo no se guardó como UTF-8.

Cuestiones relacionadas