将嵌套的XML加载到数据集中
如何将以下嵌套XML加载到DataSet中?
i1 item1 subitem1 subitem2 i2 item2 subitem1 subitem2
我可以获得“项目”表格,但我如何获得子项目?
MemoryStream itemsStream = new MemoryStream(Encoding.ASCII.GetBytes(itemsXML)); DataSet itemsSet = new DataSet(); itemsSet.ReadXml(itemsStream); foreach (DataRow itemRow in itemsSet.Tables["item"].Rows) { Console.WriteLine("column id=" + itemRow["id"] as string + " name=" + itemRow["name"] as string); }
这对我有用,我所采取的唯一自由是更改子项的字段名称。
子项的原始XML
subitem1 subitem2
为子项修改了XML
subitem1 subitem2
这是代码。
DataSet myDS = new DataSet(); DataTable myTable = new DataTable("item"); myTable.Columns.Add("id", typeof(string)); myTable.Columns.Add("name", typeof(string)); myTable.Columns.Add("name1", typeof(string)); myTable.Columns.Add("name2", typeof(string)); myDS.Tables.Add(myTable); string xmlData = " -
i1 item1 subitem1 subitem2 -
i2 item2 subitem3 subitem4 "; System.IO.MemoryStream itemsStream = new System.IO.MemoryStream(Encoding.ASCII.GetBytes(xmlData)); myDS.ReadXml(itemsStream, XmlReadMode.IgnoreSchema); foreach (DataRow itemRow in myDS.Tables["item"].Rows) { MessageBox.Show("column id=" + itemRow["id"] + " name=" + itemRow["name"]); MessageBox.Show(itemRow["name1"].ToString() + " - " + itemRow["name2"].ToString()); }
使用数据集ReadXml。 你必须遵循以下链接上的文章:
http://msdn.microsoft.com/en-us/library/7sfkwf9s(v=VS.100).aspx
例如:
DataSet ds = new DataSet(); ds.ReadXml(new StringReader(nestedXml)); StringBuilder sb = new StringBuilder(); ds.WriteXml(new StringWriter(sb)); Response.Write(sb.ToString());
当然,您可以使用ds.Tables[0]
和ds.Tables[1]
单独读取表格。
String sss = @" -
i1 item1 subitem1 subitem2 -
i2 item2 subitem1 subitem2 "; StringReader rr = new StringReader(sss); DataSet sdread = new DataSet(); sdread.ReadXml(rr);