【发布时间】:2014-07-28 04:45:50
【问题描述】:
我认为另一个人问了一个类似于我想要完成的问题HERE。我正在尝试获取 XML Web 响应并根据其日期在行中使用每个 PayCodeId 和 AmountInTime 构建一个 DataTable。有些日期没有 PayCodeIds 或 AmountInTime,但我仍然需要用一行来表示该日期。以下是 xml 响应的示例:
<DailyTotals>
<DateTotals Date="5/24/2014"/>
<DateTotals Date="5/25/2014" GrandTotal="0.0">
<Totals></Totals>
</DateTotals>
<DateTotals Date="5/26/2014" GrandTotal="13.25">
<Totals>
<Total PayCodeId="101" AmountInTime="5.25"/>
<Total PayCodeId="601" AmountInTime="13.25"/>
<Total PayCodeId="301" AmountInTime="8.0"/>
<Total PayCodeId="602" AmountInTime="8.0"/>
</Totals>
</DateTotals>
<DateTotals Date="5/27/2014"/>
<DateTotals Date="5/28/2014" GrandTotal="0.0">
<Totals></Totals>
</DateTotals>
<DateTotals Date="5/29/2014" GrandTotal="8.25">
<Totals>
<Total PayCodeId="101" AmountInTime="2.25"/>
<Total PayCodeId="601" AmountInTime="8.25"/>
<Total PayCodeId="301" AmountInTime="6.0"/>
<Total PayCodeId="602" AmountInTime="6.0"/>
</Totals>
</DateTotals>
</DailyTotals>
这是我希望我的 DataTable 的外观:
| Date | | PayCode | |AmtTime|
5/24/2014
5/25/2014
5/26/2014 101 5.25
5/26/2014 601 13.25
5/26/2014 301 8.0
5/26/2014 602 8.0
5/27/2014
5/28/2014
5/26/2014 101 2.25
5/26/2014 601 8.25
5/26/2014 301 6.25
5/26/2014 602 6.25
我正在从 xml 响应构建一个 DataSet,然后尝试使用这些表,以某种方式迭代或循环它们以完成此操作。我很难弄清楚如何为不同的支付代码创建新行并为其分配适当的日期。这是我迄今为止尝试过的代码 sn-p 不起作用:
using (XmlReader reader = XmlReader.Create(new StringReader(results)))
{
ds.ReadXml(reader);
}
// Build DataTable
dt.Columns.Add("Date");
dt.Columns.Add("PayCodeId");
dt.Columns.Add("AmountInTime");
DataTable dateTotals = ds.Tables["DateTotals"];
DataTable total = ds.Tables["Total"];
for (int i = 0; i < dateTotals.Rows.Count; i++)
{
DataRow dr;
object[] rowItems = new object[dt.Columns.Count];
// Set the Date for each row item
rowItems[0] = dateTotals.Rows[i].Field<string>("Date");
if (dateTotals.Rows[i].Field<string>("GrandTotal") == null
|| dateTotals.Rows[i].Field<string>("GrandTotal") == "0.0")
{
rowItems[1] = "";
rowItems[2] = "";
}
else
{
foreach (DataRow row in total.Rows)
{
rowItems[1] = row.Field<string>("PayCodeId");
rowItems[2] = row.Field<string>("AmountInTime");
}
}
dr = dt.NewRow();
dr.ItemArray = rowItems;
dt.Rows.Add(dr);
我希望响应中的 xml 格式有所不同,但对此我无能为力。我正在尝试使用 DataSet 及其表来完成吗?在另一个question 中,我正在查看它似乎使用不同的 XmlReadMode 选项可能有一个答案,但它是在 VB 而不是 C# 中。我仍在研究它,如果我弄清楚了,我会发布答案。感谢大家的任何帮助或建议,并帮助我学习:)
【问题讨论】: