web-dev-qa-db-ja.com

XmlDocument.Load Vs XmlDocument.LoadXml

XmlDocument.LoadXmlの使用中に問題が発生しました。

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

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

XMLを検査して問題がないことを確認した後、少しグーグル検索して、XmlDocument.LoadではなくXmlDocument.LoadXmlを使用するためのヒントを見つけました。

私はそれを試しました、そしてそれは完全に働きます。

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

20
Sergio

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

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

36
AdaTheDev

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

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

または

doc.Load("myfile.xml");

それでも問題が解決しない場合は、失敗して機能しているコードを表示できますか? LoadXmlLoadに変更する方法はいくつかあります...

24
Jon Skeet

あなたの使用を前提としていますXmlDocument.LoadおよびXmlDocument.LoadXmlrightの方法で、この問題は Byte Order Mark が原因である可能性があります。

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

3
bruno conde

Load()は特定のソースからロードしますが、LoadXml()は文字列から直接ロードします

2

アプリケーションは次のエラーでクラッシュしました:「ルートレベルのデータは無効です。行1、位置1」XMLデータにルートレベルがないと思われます:例:

<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人の母親を置き、それをすべての子供たちの壮大な祖母にしてください

0
Johnson TONG