0

ここからのアマゾン ウェブ サービス 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>
4

1 に答える 1

0

私自身の質問に答えるために、2つの新しいDataTableを宣言し、次のように目的の列を配置しました。

var dataTable1 = DS.Tables["Item"];
var dataTable2 = DS.Tables["ItemAttributes"];

if (dataTable1.Rows.Count > 0)
{
    foreach (DataRow row in dataTable1.Rows)
    {
        var url = row["DetailPageURL"].ToString();
    }
}

if (dataTable2.Rows.Count > 0)
{
    foreach (DataRow row in dataTable2.Rows)
    {
        var title = row["Title"].ToString();
        var author = row["Manufacturer"].ToString();
    }
}

エラーが表示されているので、今必要なのは2つのテーブルを1つにまとめる方法を見つけることだけです。

dataTable1.Merge(dataTable2);
DataTable merged = dataTable1;
GridView1.DataSource = merged;
于 2012-10-17T10:27:13.493 に答える