válidos varios son raíz posición nivel línea los hay elementos datos c# .net xml

c# - son - hay varios elementos raíz línea 2 posición 2



Los datos en el nivel raíz no son válidos (3)

Tengo el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?> <Offices id="0" enabled="false"> <office /> </Offices>

Cuando intento acceder a él a través de C #:

XmlDocument doc = new XmlDocument(); doc.LoadXml(HttpContext.Current.Server.MapPath("officeList.xml"));

Me sale este error:

Los datos a nivel de la raíz no es válida. Línea 1, posición 1.

¿Qué pasa con esta línea?


Descubrí que el ejemplo que estaba usando tenía una especificación de documento xml en la primera línea. Estaba usando una hoja de estilo que recibí en esta entrada de blog y la primera línea era

<?xmlversion="1.0"encoding="utf-8"?>

que estaba causando el error Cuando eliminé esa línea, para que la hoja de estilo comenzara con la línea

<xsl:stylesheet version="1.0" xmlns:DTS="www.microsoft.com/SqlServer/Dts" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

mi transformación funcionó. Por cierto, esa publicación de blog fue el primer ejemplo bueno y fácil de seguir que he encontrado para tratar de obtener información de la definición XML de un paquete SSIS, pero tuve que modificar las rutas en el ejemplo para mis paquetes de SSIS 2008 , así que tú también podrías. También creé una versión para extraer el "flujo" de las restricciones de precedencia. Mi último se ve así:

<xsl:stylesheet version="1.0" xmlns:DTS="www.microsoft.com/SqlServer/Dts" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="utf-8" /> <xsl:template match="/"> <xsl:text>From,To~</xsl:text> <xsl:text> </xsl:text> <xsl:for-each select="//DTS:PrecedenceConstraints/DTS:PrecedenceConstraint"> <xsl:value-of select="@DTS:From"/> <xsl:text>,</xsl:text> <xsl:value-of select="@DTS:To"/> <xsl:text>~</xsl:text> <xsl:text> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet>

y me dio un CSV con la tilde como mi delimitador de línea. Lo reemplacé con un avance de línea en mi editor de texto y luego lo importé a Excel para obtener un vistazo al flujo de datos en el paquete.


Esta:

doc.LoadXml(HttpContext.Current.Server.MapPath("officeList.xml"));

debiera ser:

doc.Load(HttpContext.Current.Server.MapPath("officeList.xml"));

LoadXml() es para cargar una cadena XML, no un nombre de archivo.


Para el registro:

"Los datos en el nivel raíz no son válidos" significa que ha intentado analizar algo que no es un documento XML. Ni siquiera comienza a verse como un documento XML. Por lo general, significa exactamente lo que encontraste: estás analizando algo así como la cadena "C: / inetpub / wwwroot / mysite / officelist.xml".