0

按照此处的 Amazon Web Service API 示例,我得到了填充有 XML ResponseStream 的 DataSet,如下所示:

DS.ReadXml(responseStream);

然后通过 DataBind 将其传递给 GridView,如下所示:

GridView1.DataSource = DS.Tables["ItemAttributes"];
GridView1.DataBind();
GridView2.DataSource = DS.Tables["Item"];
GridView2.DataBind();

问题是,我从该 XML 和两个表中获取所有列,并且我只想在一个表中显示 XML 属性中的某些列(DetailPageURL、Author、Title)。我在类似的帖子中尝试了一些东西,但没有一个奏效。在将流放在 GridView 之前,我还尝试将流传递给 XDocument,但出现“缺少根元素”错误。此外,尝试使用 Linq 提取这些列,但没有成功。不过,我的知识有限,所以我可能对代码做错了。

数据集中的 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

为了回答我自己的问题,我声明了两个新的 DataTables,并在其中放置了所需的列,如下所示:

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();
    }
}

我现在需要的是找到一种方法将两个表放在一起,因为这会显示错误:

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