C# 将xml数据表解析为数据集
我正在编写一个网页,该网页需要解析来自API调用派生的XML的数据,但XML被格式化为数据头、数据体类型模式 我需要能够为ASP.net C#页面解析这个,在这里我将把数据导入SQL Server表中。。。任何帮助都将不胜感激 所讨论的XML是:C# 将xml数据表解析为数据集,c#,asp.net,xml,parsing,datatable,C#,Asp.net,Xml,Parsing,Datatable,我正在编写一个网页,该网页需要解析来自API调用派生的XML的数据,但XML被格式化为数据头、数据体类型模式 我需要能够为ASP.net C#页面解析这个,在这里我将把数据导入SQL Server表中。。。任何帮助都将不胜感激 所讨论的XML是: <?xml version="1.0" encoding="UTF-8"?> <report> <head> <vars> <var name="us
<?xml version="1.0" encoding="UTF-8"?>
<report>
<head>
<vars>
<var name="userId">selfservice</var>
<var name="networkId">607</var>
<var name="reportName">Advertiser Channel Report</var>
</vars>
</head>
<body>
<component name="">
<component-header>Data</component-header>
<component-body>
<table name="">
<table-header/>
<table-body>
<overview>
<overview_item property="Execution time:">
0.000 second(s)
</overview_item>
<overview_item entity="Days stat" property="Days stat:">10/21/2014 - 10/21/2014</overview_item>
<overview_item entity="Advertiser" property="Advertiser Name:"> Like _SS</overview_item>
</overview>
<data>
<data-header>
<dr>
<dv type="int">Sr. No.</dv>
<dv type="int">Advertiser ID</dv>
<dv type="string">Advertiser Name</dv>
<dv type="int">Channel ID</dv>
<dv type="string">Channel Name</dv>
<dv type="long">Channel Impressions</dv>
<dv type="timestamp">Daily</dv>
<dv type="long">Days stat Impressions</dv>
</dr>
</data-header>
<data-body>
<dr class="total">
<dv>46 row(s) total</dv>
<dv/>
<dv/>
<dv/>
<dv/>
<dv>1073</dv>
<dv/>
<dv>1073</dv>
</dr>
<dr>
<dv t="ns">1</dv>
<dv t="ns">596749</dv>
<dv t="s">DATest3_SS</dv>
<dv t="ns">22923</dv>
<dv t="s">CS2261</dv>
<dv t="ns">1</dv>
<dv t="ns">10/21/2014</dv>
<dv t="ns">1</dv>
</dr>
<dr>
<dv t="ns">2</dv>
<dv t="ns">596749</dv>
<dv t="s">DATest3_SS</dv>
<dv t="ns">22683</dv>
<dv t="s">CS2258</dv>
<dv t="ns">1</dv>
<dv t="ns">10/21/2014</dv>
<dv t="ns">1</dv>
</dr>
<dr>
<dv t="ns">3</dv>
<dv t="ns">596749</dv>
<dv t="s">DATest3_SS</dv>
<dv t="ns">12174</dv>
<dv t="s">CR5925</dv>
<dv t="ns">2</dv>
<dv t="ns">10/21/2014</dv>
<dv t="ns">2</dv>
</dr>
<dr>
<dv t="ns">4</dv>
<dv t="ns">596749</dv>
<dv t="s">DATest3_SS</dv>
<dv t="ns">26519</dv>
<dv t="s">CS2938</dv>
<dv t="ns">65</dv>
<dv t="ns">10/21/2014</dv>
<dv t="ns">65</dv>
</dr>
<dr>
<dv t="ns">5</dv>
<dv t="ns">596749</dv>
<dv t="s">DATest3_SS</dv>
<dv t="ns">22776</dv>
<dv t="s">CS2261</dv>
<dv t="ns">19</dv>
<dv t="ns">10/21/2014</dv>
<dv t="ns">19</dv>
</dr>
<dr>
<dv t="ns">6</dv>
<dv t="ns">596749</dv>
<dv t="s">DATest3_SS</dv>
<dv t="ns">2748</dv>
<dv t="s">CN4940</dv>
<dv t="ns">7</dv>
<dv t="ns">10/21/2014</dv>
<dv t="ns">7</dv>
</dr>
<dr>
<dv t="ns">7</dv>
<dv t="ns">596749</dv>
<dv t="s">DATest3_SS</dv>
<dv t="ns">4235</dv>
<dv t="s">CN3539</dv>
<dv t="ns">1</dv>
<dv t="ns">10/21/2014</dv>
<dv t="ns">1</dv>
</dr>
<dr>
<dv t="ns">8</dv>
<dv t="ns">596749</dv>
<dv t="s">DATest3_SS</dv>
<dv t="ns">25387</dv>
<dv t="s">CS264</dv>
<dv t="ns">3</dv>
<dv t="ns">10/21/2014</dv>
<dv t="ns">3</dv>
</dr>
<dr>
<dv t="ns">9</dv>
<dv t="ns">596749</dv>
<dv t="s">DATest3_SS</dv>
<dv t="ns">22779</dv>
<dv t="s">CS2261</dv>
<dv t="ns">3</dv>
<dv t="ns">10/21/2014</dv>
<dv t="ns">3</dv>
</dr>
<dr class="total">
<dv>46 row(s) total</dv>
<dv/>
<dv/>
<dv/>
<dv/>
<dv>1073</dv>
<dv/>
<dv>1073</dv>
</dr>
</data-body>
<data-footer/>
</data>
</table-body>
</table>
</component-body>
</component>
</body>
</report>
自助服务
607
广告商频道报道
资料
0.000秒
10/21/2014 - 10/21/2014
就像
高级专员。
广告客户ID
广告商名称
通道ID
频道名称
渠道印象
每日的
天统计印象
共46行
1073
1073
1.
596749
日期3
22923
CS2261
1.
10/21/2014
1.
2.
596749
日期3
22683
CS2258
1.
10/21/2014
1.
3.
596749
日期3
12174
CR5925
2.
10/21/2014
2.
4.
596749
日期3
26519
CS2938
65
10/21/2014
65
5.
596749
日期3
22776
CS2261
19
10/21/2014
19
6.
596749
日期3
2748
CN4940
7.
10/21/2014
7.
7.
596749
日期3
4235
人民币3539元
1.
10/21/2014
1.
8.
596749
日期3
25387
CS264
3.
10/21/2014
3.
9
596749
日期3
22779
CS2261
3.
10/21/2014
3.
共46行
1073
1073
如果您的目标是显示
public DataTable parseReport(List<zapi.ClientReportResultItem> reportItems)
{
StringBuilder sb = new StringBuilder();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(reportItems[0].body);
StringReader sReader = new StringReader(xmlDoc.InnerXml);
System.Xml.Linq.XDocument d = System.Xml.Linq.XDocument.Load(sReader);
List<_headers> headers = new List<_headers>();
_headers header = new _headers();
var headerXml = from r in d.Descendants("data-header")
.Descendants("dr")
.Descendants("dv")
select new
{
dv = r.Value,
dv_type = r.Attribute("type").Value
};
foreach (var _val in headerXml)
{
header = new _headers();
header.name = _val.dv;
header.type = _val.dv_type;
headers.Add(header);
}
//Create Data Table
DataTable reportData = new DataTable();
foreach (var head in headers)
{
if (head.type == "timestamp")
reportData.Columns.Add(head.name, typeof(DateTime));
else if (head.type == "int")
reportData.Columns.Add(head.name, typeof(int));
else if (head.type == "string")
reportData.Columns.Add(head.name, typeof(string));
else if (head.type == "float")
reportData.Columns.Add(head.name, typeof(float));
else if (head.type == "long")
reportData.Columns.Add(head.name, typeof(long));
}
var data = from r in d.Descendants("data-body")
.Descendants("dr")
where r.HasAttributes == false
select new
{
dv = r.Elements()
};
foreach (var datavalue in data)
{
DataRow dr = reportData.NewRow();
for (int iCount = 0; iCount < datavalue.dv.Count(); iCount++)
{
dr[iCount] = datavalue.dv.ToArray()[iCount].Value;
}
reportData.Rows.Add(dr);
}
return reportData;
}