1. ホーム
  2. c#

[解決済み] ルート要素がない

2022-01-30 10:14:56

質問

xxx URlからxmlを読んでいますが、Root要素がないためエラーが発生します。

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>

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

どうすればいいですか?

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

  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の位置が0でない場合は0に設定してください。

if (xmlStream.Position > 0)
{
    xmlStream.Position = 0;
}
XDocument xDoc = XDocument.Load(xmlStream);