web-dev-qa-db-fra.com

Les données au niveau racine sont invalides

J'ai le document XML suivant:

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

Lorsque j'essaie d'y accéder via C #:

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

Je reçois cette erreur:

Les données au niveau racine ne sont pas valides. Ligne 1, position 1.

Quel est le problème avec cette ligne?

51
phil crowe

Cette:

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

devrait être:

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

LoadXml() est utilisé pour charger une chaîne XML, pas un nom de fichier.

95
BrokenGlass

Pour mémoire:

"Les données au niveau racine sont invalides" signifie que vous avez tenté d'analyser quelque chose qui n'est pas un document XML. Il n'a même pas démarrer ressembler à un document XML. Cela signifie généralement ce que vous avez trouvé: vous analysez quelque chose comme la chaîne "C:\inetpub\wwwroot\mysite\officelist.xml".

20
John Saunders

J'ai constaté que l'exemple que j'utilisais avait une spécification de document XML sur la première ligne. J'utilisais une feuille de style que j'avais à cette entrée de blog et la première ligne était

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

qui causait l'erreur. Quand j'ai enlevé cette ligne, pour que la feuille de style commence par la ligne

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

ma transformation a fonctionné. En passant, cet article de blog a été le premier bon exemple facile à suivre que j'ai trouvé pour essayer d'obtenir des informations à partir de la définition XML d'un package SSIS, mais j'ai dû modifier les chemins d'accès dans l'exemple de mes packages SSIS 2008. alors vous pourriez aussi. J'ai également créé une version pour extraire le "flux" des contraintes de priorité. Ma dernière ressemble à ceci:

    <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>

et m'a donné un fichier CSV avec le tilde comme séparateur de ligne. J'ai remplacé cela par un saut de ligne dans mon éditeur de texte, puis importé dans Excel pour consulter le flux de données dans le package.

1
Joseph Morgan