将嵌套的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);