Import XML into Dataset C#

后端 未结 5 868
北海茫月
北海茫月 2020-12-06 03:13

I am trying to get a xml file into a dataset and am using the following code:

DataSet ds = new DataSet(\"TestDataSet\");
ds.ReadXml(FileName);
5条回答
  •  孤街浪徒
    2020-12-06 03:58

    DataSet ds = new DataSet("Whatev");
    DataTable catalog = ds.Tables.Add("Catalog");
    DataColumn recCol = catalog.Columns.Add("Rec");
    DataTable rec = ds.Tables.Add("Rec");
    
    rec.Columns.AddRange(new DataColumn[] { 
        new DataColumn("ITEM", typeof(string)), 
        new DataColumn("QTY", typeof(string)),
        new DataColumn("SUB", typeof(string)),
        new DataColumn("CATALOG", typeof(string))
    });            
    
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);
    foreach (XmlNode recNode in doc.GetElementsByTagName("Rec"))
    {
        DataRow row = rec.Rows.Add(
            recNode["ITEM"].InnerText,
            recNode["QTY"].InnerText,
            recNode["SUB"].InnerText,
            recNode["CATALOG"].InnerText);
    }
    

    There ya go. Now there will be two tables, Catalog and Rec. I suspect you only want Rec though, because Catalog is useless. So just remove the catalog datatable code if that's the case, or add an id attribute each catalog row and link it to rec:

    DataSet ds = new DataSet("Whatev");
    DataTable catalog = ds.Tables.Add("Catalog");
    DataColumn idCol = catalog.Columns.Add("Id");
    DataTable rec = ds.Tables.Add("Rec");
    
    rec.Columns.AddRange(new DataColumn[] { 
        new DataColumn("ITEM", typeof(string)), 
        new DataColumn("QTY", typeof(string)),
        new DataColumn("SUB", typeof(string)),
        new DataColumn("CATALOG", typeof(string))
    });
    
    catalog.ChildRelations.Add("catToRecRelation", idCol, rec.Columns["CATALOG"]);
    
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);
    foreach (XmlNode recNode in doc.GetElementsByTagName("Rec"))
    {
        // Create id in parent Catalog node, based on CATALOG value
        catalog.Rows.Add(recNode["CATALOG"].InnerText);
    
        DataRow row = rec.Rows.Add(
        recNode["ITEM"].InnerText,
        recNode["QTY"].InnerText,
        recNode["SUB"].InnerText,
        recNode["CATALOG"].InnerText);
    }
    
    var childRows = catalog.Rows[0].GetChildRows("catToRecRelation");
    

提交回复
热议问题