0

XDocument と XElement を使用して XML を読み取ります。Visual Studio 2012 から Web サイトを実行している間、読み取りに問題はありません。公開後、「ルート要素が見つかりません」という例外が発生します。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Xml.XmlException: ルート要素がありません。

以下の XML を見つけてください

<CTReport>
  <ReportHeader>
    <UserID>1508ac07-0070-46b9-84f4-533b83cb3770</UserID>
  </ReportHeader>
  <ReportInfoToDisplay>
    <Report PlaceHolder="7">
      <Info Name="Average Mix report" TranslatedText="" ShowPrice="1" />
      <ReportControls>
        <ControlInfo Type="Date" Name="Date" TranslatedText="" Data="!" />
        <ControlInfo Type="Lookup" Name="Scale operator" TranslatedText="" Data="" />
        <ControlInfo Type="Lookup" Name="Display Jobs of" TranslatedText="" Data="Normal!Layaway!" />
        <ControlInfo Type="Combo" Name="SortBy" TranslatedText="SortBy" Data="Sort by mixer + product group!Sort by product group" />
      </ReportControls>
    </Report>
    <Report />
    <Report PlaceHolder="8">
      <Info Name="Mix report" TranslatedText="" ShowPrice="0" />
      <ReportControls>
        <ControlInfo Type="Date" Name="Date" TranslatedText="" Data="!" />
        <ControlInfo Type="Lookup" Name="Scale operator" TranslatedText="" Data="" />
        <ControlInfo Type="Combo" Name="SortBy" TranslatedText="SortBy" Data="Sort by mixer + product group!Sort by product group" />
      </ReportControls>
    </Report>
    <Report PlaceHolder="9">
      <Info Name="Scale report" TranslatedText="" ShowPrice="0" />
      <ReportControls>
        <ControlInfo Type="Date" Name="Date" TranslatedText="" Data="!" />
        <ControlInfo Type="String" Name="Job reference" TranslatedText="" Data="" />
        <ControlInfo Type="String" Name="Job ID" TranslatedText="" Data="" />
        <ControlInfo Type="Lookup" Name="Scale operator" TranslatedText="" Data="" />
      </ReportControls>
    </Report>
  </ReportInfoToDisplay>
</CTReport>

コード:

  XDocument xml = XDocument.Parse(reportXML);

reportXML は文字列です。

XDocument は XML ファイルから作成されますが、例外はありません。

4

1 に答える 1

1

問題はほぼ確実に、解析しようとしている XML が上に投稿したものと一致しないことです。

いくつかのシナリオがあります:

  1. 複数のCTReport要素があります (つまり、XML に 2 セットのレポートがあります)。
  2. まったくありませんCTReport(したがって、トップレベルではReportHeaderReportInfoToDisplay
  3. 予想どおり1 つCTReportの要素がありますが、ルート レベルにも他の要素があります。
  4. あなたの文書は完全に空です。

あなたができる最善のことは、コードに行を追加して内容をreportXMLテキストファイルに出力することです。これにより、内容をよりよく見て、期待どおりであることを確認できます。これを行うには、XML を解析する直前に次のような行を追加します。

System.IO.File.WriteAllText(@"<Put an output file path here>", reportXML);
于 2012-09-13T08:21:45.060 に答える