web-dev-qa-db-ja.com

ルートレベルのデータが無効です

次のXMLドキュメントがあります。

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

C#からアクセスしようとすると:

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

私はこのエラーを受け取ります:

ルートレベルのデータが無効です。行1、位置1。

この行の何が問題になっていますか?

51
phil crowe

この:

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

する必要があります:

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

LoadXml()は、ファイル名ではなくXML文字列をロードするためのものです。

95
BrokenGlass

記録のために:

「ルートレベルのデータが無効です」とは、XMLドキュメントではない何かを解析しようとしたことを意味します。 startでさえXMLドキュメントのようには見えません。通常は、見つけたものを意味します。文字列「C:\ inetpub\wwwroot\mysite\officelist.xml」のようなものを解析しています。

20
John Saunders

私が使用している例では、最初の行にxmlドキュメントの仕様があることがわかりました。 このブログエントリ で取得したスタイルシートを使用しており、最初の行は

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

エラーの原因でした。その行を削除して、スタイルシートがその行で始まるようにしたとき

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

私の変換は機能しました。ちなみに、そのブログ投稿は、SSISパッケージのXML定義から情報を取得しようとするために見つけた最初の良い、わかりやすい例でしたが、SSIS 2008パッケージの例のパスを変更する必要がありました、あなたもかもしれない。優先順位制約から「フロー」を抽出するバージョンも作成しました。私の最後のものは次のようになります:

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

そして、チルダを行区切り文字としてCSVをくれました。それをテキストエディターのラインフィードに置き換え、Excelにインポートして、パッケージのデータフローを確認しました。

1
Joseph Morgan