18

xxx URl から xml を読み取っていますが、ルート要素が見つからないためエラーが発生しています。

xml 応答を読み取るための私のコードは次のとおりです。

  XmlDocument doc = new XmlDocument();
  doc.Load("URL from which i am reading xml");
  XmlNodeList nodes = doc.GetElementsByTagName("Product");
  XmlNode node = null;
  foreach (XmlNode n in nodes)
   {
   }

xml 応答は次のとおりです。

<All_Products>
   <Product>
  <ProductCode>GFT</ProductCode>
  <ProductName>Gift Certificate</ProductName>
  <ProductDescriptionShort>Give the perfect gift. </ProductDescriptionShort>
  <ProductDescription>Give the perfect gift.</ProductDescription>
  <ProductNameShort>Gift Certificate</ProductNameShort> 
  <FreeShippingItem>Y</FreeShippingItem>
  <ProductPrice>55.0000</ProductPrice>
  <TaxableProduct>Y</TaxableProduct>
   </Product>    
 </All_Products>

どこが間違っているのか教えてください。

4

6 に答える 6

79

誰かが Google からここにたどり着いた場合に備えて、XDocument.Load(Stream) メソッドを使用しているときにこのエラー メッセージに悩まされました。

XDocument xDoc = XDocument.Load(xmlStream);  

ストリームを読み込んでみる前に、ストリームの位置が 0 (ゼロ) に設定されていることを確認してください。これは私がいつも見落としがちな間違いです!

if (xmlStream.Position > 0)
{
    xmlStream.Position = 0;
}
XDocument xDoc = XDocument.Load(xmlStream); 
于 2014-05-20T10:26:01.920 に答える
5

こんにちはこれは奇妙な方法ですが、一度試してみてください

  1. ファイルの内容を文字列に読み込む
  2. 文字列を印刷して、適切なXMLを取得しているかどうかを確認します
  3. あなたが使用することができますXMLDocument.LoadXML(xmlstring)

XML宣言を追加せずに、コードと同じXMLを試してみます。

XmlDocument doc = new XmlDocument();
        doc.Load(@"H:\WorkSpace\C#\TestDemos\TestDemos\XMLFile1.xml");
        XmlNodeList nodes = doc.GetElementsByTagName("Product");
        XmlNode node = null;
        foreach (XmlNode n in nodes)
        {
            Console.WriteLine("HI");
        }

Philが以下の回答で述べているように、ゼロでない場合はxmlStreamの位置をゼロに設定してください。

if (xmlStream.Position > 0)
{
    xmlStream.Position = 0;
}
XDocument xDoc = XDocument.Load(xmlStream); 
于 2012-04-12T14:44:20.323 に答える
3

XML ファイルをリモートの場所からロードしている場合は、Fiddlerなどのスニファーを使用して、ファイルが実際に正しくダウンロードされているかどうかを確認します。

コードを実行してファイルを解析する簡単なコンソール アプリを作成しましたが、問題なく動作します。

于 2012-04-12T14:42:21.160 に答える