22

を使用して問題に遭遇しましたXmlDocument.LoadXml

アプリケーションがクラッシュし、次のエラーが発生しました:

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

XML を調べて問題がないことを確認した後、少しググったところ、XmlDocument.Load代わりに使用するヒントが見つかりましたXmlDocument.LoadXml

私はそれを試してみましたが、完全に機能します。

私の質問は次のとおりです。2 つの方法の違いは何ですか。一方が機能し、もう一方が失敗する原因は何ですか?

4

5 に答える 5

39

XmlDocument.Loadは、ストリーム、TextReader、パス/URL、または XmlReader から XML をロードするために使用されます。 XmlDocument.LoadXmlは、文字列に含まれる XML を読み込むために使用されます。

これらは、XML が実際に格納されている場所に応じて、XML を読み込む基本的に異なる方法です。そのため、XML の場所に対して間違った方法を使用していたようです。

于 2009-11-02T11:20:42.220 に答える
25

XmlDocument.LoadXmlファイルの名前を使用して渡そうとしましたか? それはしません - あなたが渡す文字列が XML であると仮定します。したがって、次を使用できます。

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

また

doc.Load("myfile.xml");

それでも問題が解決しない場合は、失敗した動作中のコードを示していただけますか? LoadXml使用から変更できるさまざまな方法がありますLoad...

于 2009-11-02T11:20:53.013 に答える
3

正しい方法で使用するXmlDocument.Loadと仮定すると、この問題はByte Order Markが原因である可能性があります。XmlDocument.LoadXml

この他の質問は役に立つかもしれません。

于 2009-11-02T11:30:52.273 に答える
3

Load() は特定のソースから読み込みますが、LoadXml() は文字列から直接読み込みます

于 2009-11-02T11:20:59.957 に答える
0

アプリケーションが次のエラーでクラッシュしていました。

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

最下位レベルの上に少なくとも 1 つのルート レベルが必要です。例えば:

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

だから、あなたのレベルの一番上に母親を1人入れて、それをすべての子供たちのグランドグランドマザーにしてください

于 2011-03-10T04:30:23.180 に答える