[英]Specific elements from XML string to a datagridview or datatable (C#)
我只是最近才開始使用XML字符串。 我現在正在使用Web服務從數據庫中提取記錄。 它返回以下輸出:
<?xml version="1.0" encoding="utf-16"?>
<Records count="2">
<Metadata>
<FieldDefinitions>
<FieldDefinition id="13597" name="Statement" alias="Statement" />
<FieldDefinition id="13598" name="Response" alias="Response" />
</FieldDefinitions>
</Metadata>
<Record contentId="154321" moduleId="409">
<Field id="13597" type="1"><p>This is a database record</p></Field>
<Field id="13598" type="1"><p>This is a record</p></Field>
</Record>
<Record contentId="154755" moduleId="409">
<Field id="13597" type="1"><p>This is another database record</p></Field>
<Field id="13598" type="1"><p>And another corresponding record</p></Field>
</Record>
</Records>
我想要實現的是將顯示給用戶的datatable / datagridview。 這將是這樣的:
| Statement | Response |
|This is a datab..| This is a corr.|
|This is another..| And another....|
我嘗試了以下代碼:
private void WriteDataGrid(string xml)
{
DataSet ds = new DataSet();
XmlTextReader reader = new XmlTextReader(xml, XmlNodeType.Document, null);
ds.ReadXml(reader);
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Field";
}
但是,它僅設法獲得了這一點:
| id | type | Field_Text |
|13597 | 1 | This is a... |
|13598 | 1 | This is a corr...|
|13597 | 1 | This is anoth... |
|13598 | 1 | And anothe... |
我計划使用xml中的字段ID來創建唯一列,然后根據包含的值設置行的值。 但是我不確定該怎么做。 有人可以幫忙嗎? 還是我有更好的方法來實現自己的目標?
我知道,如果Elements是唯一的,這會容易得多,但是我無法以任何方式更改webservices的輸出。
任何幫助將非常感激。
編輯:
我只是意識到我忽略了補充,XML字符串在字段文本中將包含HTML標記和標記(特別是<p> </ p> )( &lt&gt&amp等)。 在將它們寫入數據表之前,有人對我如何刪除/轉義/解碼有任何建議嗎?
// XMLFile.xml文件包含服務的xml響應。 最終輸出是dt1,其中包含所需格式的數據。
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.ReadXml(Server.MapPath("~/XMLFile.xml"));
dt = ds.Tables[5];
var query = from s in dt.AsEnumerable()
group s by s.Field<string>("id") into g
select new { id = g.Key, field_text = g.ToList(),Count=g.ToList().Count };
DataTable dt1 = new DataTable();
int maxRowid=0;
foreach (var obj in query)
{
dt1.Columns.Add(obj.id);
if(obj.Count>maxRowid)
{
maxRowid=obj.Count;
}
}
// Add Rows to table
for (int count = 0; count < maxRowid; count++)
{
dt1.Rows.Add("", "");
}
int i = 0;
foreach (var obj in query)
{
int j = 0;
foreach (var dr in obj.field_text)
{
dt1.Rows[j][i] = ((DataRow)dr)["field_text"];
j++;
}
i++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.