2009-11-02 14 views
16

Me encontré con un problema al usar XmlDocument.LoadXml.XmlDocument.Load Vs XmlDocument.LoadXml

La aplicación se bloquea, dando el siguiente error:

"Data at the root level is invalid. Line 1, position 1"

Después de inspeccionar el XML y no encontrar nada malo en ello, he buscado en Google un poco y encontré una punta a utilizar en lugar de XmlDocument.LoadXmlDocument.LoadXml.

Lo he probado y funciona perfectamente.

Mi pregunta es: ¿Cuál es la diferencia entre los 2 métodos y qué podría haber causado que uno funcione y el otro que falle?

Respuesta

32

XmlDocument.Load se utiliza para cargar XML, ya sea desde una secuencia, TextReader, ruta/URL o XmlReader. XmlDocument.LoadXml se utiliza para cargar el XML contenido en una cadena.

Son formas fundamentalmente diferentes de cargar XML, dependiendo de dónde se almacena realmente el XML. Parece que estabas usando el método incorrecto para saber dónde está tu XML.

20

¿Estabas tratando de usar XmlDocument.LoadXml y pasando el nombre de un archivo? No hace eso: asume que la cadena que pasa en es XML. Así que es posible utilizar:

doc.LoadXml("<root><child /><root>"); 

o

doc.Load("myfile.xml"); 

Si eso no ayuda, ¿podría mostrar su defecto y el código de trabajo? Hay diferentes formas en las que podría haber cambiado el uso de LoadXml-Load ...

+0

que estoy usando el método doc.LoadXml. Tengo un archivo xml que también contiene un archivo de definición de tipo de documento. Lo puse en SoccerMatchPlus.dtd donde existen los archivos xml. Recibí un error al usar el método doc.LoadXml como No se pudo encontrar el archivo 'C: \ Windows \ system32 \ SoccerMatchPlus.dtd'. ¿Por qué el método doc.LoadXml encuentra el archivo en la carpeta 'C: \ Windows \ system32?¿Puedo cambiar su ruta en tiempo de ejecución? –

+0

@Rais: Parece que es posible que desee comenzar una nueva pregunta ... –

+0

bien, publico mi pregunta, creo que tiene razón. Gracias. –

2

Load() carga de una determinada fuente, mientras que LoadXml() carga directamente desde una cadena

3

Asumiendo que su uso XmlDocument.Load y en el XmlDocument.LoadXmlderecho manera este problema puede ser causado por Byte Order Mark.

Esto other question puede ser útil.

+0

Sí, esto. Acabo de descubrir, de la manera difícil, que no debería convertir un 'byte []' en una 'cadena' (incluso si sé la codificación) antes de cargar un' XmlDocument'. Esta fue la razón exacta: me estaban haciendo una BOM. Cargué el 'byte []' en un 'MemoryStream' en su lugar, y todo está bien. –

0

La aplicación se estrellaba con el siguiente error: "Los datos a nivel de la raíz no es válido Línea 1, posición 1". sospecho que los datos XML no tiene un nivel de raíz: por ejemplo:

<area id="1"> 
    <candidate id="0">dataata</candidate> 
</area> 
<area id="2"> 
    <candidate id="0">dataataa</candidate> 
</area> 

necesita tener al menos un nivel de raíz en la parte superior de los niveles inferiores. por ejemplo:

<areas> 
    <area id="1"> 
    <candidate id="0">dataata</candidate> 
    </area> 
    <area id="2"> 
    <candidate id="0">dataataa</candidate> 
    </area> 
</areas> 

así que por favor ponga una madre en la parte superior de su nivel, lo convierten en gran abuela de todos los niños

+0

La línea 1, posición 1 es el comienzo mismo del documento. Todavía no ha comenzado a buscar la validez estructural y un elemento de nivel de doc. –

Cuestiones relacionadas