ここからのアマゾン ウェブ サービス API の例に従って、次のように XML ResponseStream が入力された DataSet を取得しました。
DS.ReadXml(responseStream);
次に、次のように DataBind を介して GridView に渡されます。
GridView1.DataSource = DS.Tables["ItemAttributes"];
GridView1.DataBind();
GridView2.DataSource = DS.Tables["Item"];
GridView2.DataBind();
問題は、その XML からすべての列を 2 つのテーブルで取得し、XML 属性から特定の列 (DetailPageURL、Author、Title) のみを 1 つのテーブルに表示したいことです。投稿に似たものを試しましたが、うまくいきませんでした。また、ストリームを GridView に配置する前に XDocument に渡そうとしましたが、「ルート要素が見つかりません」というエラーが発生します。また、Linq でこれらの列を抽出しようとしましたが、うまくいきませんでした。ただし、私の知識は限られているため、コードに何か問題がある可能性があります。
DataSet に入る XML 応答のスニペットは次のとおりです。
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
<OperationRequest>
<HTTPHeaders>
<Header Name="UserAgent" Value="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"/>
</HTTPHeaders>
<RequestId>fafe85b6-3002-49ec-b716-e2057f9b94a0</RequestId>
<Arguments>
<Argument Name="Operation" Value="ItemSearch"/>
<Argument Name="Service" Value="AWSECommerceService"/>
<Argument Name="Signature" Value="..."/>
<Argument Name="AssociateTag" Value="..."/>
<Argument Name="Version" Value="2011-08-01"/>
<Argument Name="Keywords" Value="harry potter"/>
<Argument Name="AWSAccessKeyId" Value="..."/>
<Argument Name="Timestamp" Value="2012-10-14T15:16:02.000Z"/>
<Argument Name="SearchIndex" Value="Books"/>
</Arguments>
<RequestProcessingTime>0.0701880000000000</RequestProcessingTime>
</OperationRequest>
<Items>
<Request>...</Request>
<TotalResults>8394</TotalResults>
<TotalPages>840</TotalPages>
<MoreSearchResultsUrl>...</MoreSearchResultsUrl>
<Item>
<ASIN>059035342X</ASIN>
<DetailPageURL>...</DetailPageURL>
<ItemLinks>...</ItemLinks>
<ItemAttributes>
<Author>J.K. Rowling</Author>
<Creator Role="Illustrator">Mary GrandPré</Creator>
<Manufacturer>Scholastic Paperbacks</Manufacturer>
<ProductGroup>Book</ProductGroup>
<Title>Harry Potter and the Sorcerer's Stone (Book 1)</Title>
</ItemAttributes>