Import XML in Dataset C #

I am trying to get an xml file in a dataset and use the following code:

DataSet ds = new DataSet("TestDataSet");
ds.ReadXml(FileName);

and this xml file:

<Catalog>
 <Rec>
   <ITEM dt:dt="string"/>
   <QTY dt:dt="string">1</QTY>
   <SUB dt:dt="string">1</SUB>
   <CATALOG dt:dt="string">ABC123</CATALOG>
  </Rec>
  <Rec>
   <ITEM dt:dt="string"/>
   <QTY dt:dt="string">1</QTY>
   <SUB dt:dt="string">1</SUB>
   <CATALOG dt:dt="string">ABC124</CATALOG>
  </Rec>
  <Rec>
   <ITEM dt:dt="string"/>
   <QTY dt:dt="string">1</QTY>
   <SUB dt:dt="string">1</SUB>
   <CATALOG dt:dt="string">ABC125</CATALOG>
  </Rec>
 </Catalog>

The problem is that after setting the clock on ds, it contains only the Rec table and the Rec_Id column. If I delete the dt: dt = "String" data type, everything will work fine.

I am using C # .net 2008 ...

Can someone please report the correct way to import this data without modifying the xml file?

thanks

+5
source share
6 answers

Once you define the XML namespace used in the XML elements, you can easily import it - no problem.

You need your XML to look something like this:

<Catalog xmlns:dt="some-xml-namespace-here">
 <Rec>
   <ITEM dt:dt="string"/>
   <QTY dt:dt="string">1</QTY>
   <SUB dt:dt="string">1</SUB>
   <CATALOG dt:dt="string">ABC123</CATALOG>
  </Rec>
  .....
 </Catalog>

, , ( 5 DataSet).

+5

, ReadXml , , XML . , .

+1
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);
}

. , . , Rec, . datatable , , id 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");
+1

se mucho ingles así que escribiré en español. Yo tenia el mismo problema y después de una continua búsqueda ademas de probar muchas veces, encontré la solución en las siguientes lineas.

DataSet dataSet = new DataSet();
DataTable dataTable = new DataTable("table1");
dataTable.Columns.Add("col1", typeof(string));
dataSet.Tables.Add(dataTable);

string xmlData = "<XmlDS><table1><col1>Value1</col1></table1><table1><col1>Value2</col1></table1></XmlDS>";

System.IO.StringReader xmlSR = new System.IO.StringReader(xmlData);
dataSet.ReadXml(xmlSR, XmlReadMode.IgnoreSchema);

http://msdn.microsoft.com/es-es/library/fx29c3yd(v=vs.110).aspx

Espero les ayude como ami.

Saludos

+1

. dt xmlns: dt = "urn: schemas-microsoft-com: datatypes". - - XML, , xmlns , :

            string xml = @"<Catalog xmlns=""dt"" xmlns:dt=""dt"">
                        <Rec>
                        <ITEM dt:dt=""string""/>   
                        <QTY dt:dt=""string"">1</QTY>   
                        <SUB dt:dt=""string"">1</SUB>   
                        <CATALOG dt:dt=""string"">ABC123</CATALOG>  
                        </Rec>  
                        <Rec>   
                        <ITEM dt:dt=""string""/>   
                        <QTY dt:dt=""string"">1</QTY>   
                        <SUB dt:dt=""string"">1</SUB>   
                        <CATALOG dt:dt=""string"">ABC124</CATALOG>  
                        </Rec>  
                        <Rec>   
                        <ITEM dt:dt=""string""/>   
                        <QTY dt:dt=""string"">1</QTY>   
                        <SUB dt:dt=""string"">1</SUB>   
                        <CATALOG dt:dt=""string"">ABC125</CATALOG>  
                        </Rec> 
                        </Catalog>";

        DataSet ds = new DataSet("Whatev");

        TextReader txtReader = new StringReader(xml);
        XmlReader reader = new XmlTextReader(txtReader);
        ds.ReadXml(reader);
        Debug.Assert(ds.Tables.Count ==5);
        Debug.Assert((string)ds.Tables[2].Rows[0][0] == "string");
        Debug.Assert((string)ds.Tables[3].Rows[0][1] == "1");

, :

<xs:schema xmlns:dt="dt" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="dt" xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="Catalog"><xs:complexType>    <xs:sequence><xs:element maxOccurs="unbounded" name="Rec"><xs:complexType><xs:sequence><xs:element name="ITEM"><xs:complexType><xs:attribute ref="dt:dt" use="required" /></xs:complexType></xs:element><xs:element name="QTY"><xs:complexType>
              <xs:simpleContent><xs:extension base="xs:unsignedByte"><xs:attribute ref="dt:dt" use="required" /></xs:extension></xs:simpleContent></xs:complexType>
          </xs:element><xs:element name="SUB"><xs:complexType><xs:simpleContent><xs:extension base="xs:unsignedByte"><xs:attribute ref="dt:dt" use="required" /></xs:extension></xs:simpleContent></xs:complexType></xs:element><xs:element name="CATALOG"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"><xs:attribute ref="dt:dt" use="required" /></xs:extension></xs:simpleContent></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element><xs:attribute name="dt" type="xs:string" /></xs:schema>

"dt" . , xml xmlns = "ds".

0

...

XML:

// you need to create a datatable, from a sql query, linq, your choice...
DataTable _dt = new DataTable();
// write the datatable with schema
dt.WriteXml("datatable.xml", XmlWriteMode.WriteSchema);

XML:

DataTable dt = new DataTable ();
dt.Clear();
dt.ReadXml("datatable.xml", XmlReadMode.ReadSchema);

datatable , IList, , :

public IList<T> toList<T>(DataTable table)
{
    List<T> list = new List<T>();
    T item;
    Type listItemType = typeof(T);

    for (int i = 0; i < table.Rows.Count; i++)
    {
        item = (T)Activator.CreateInstance(listItemType);
        mapRow(item, table.Rows[i], listItemType);
        list.Add(item);
    }
    return list;
}
private void mapRow(object vOb, System.Data.DataRow dr, Type type)
{
    try
    {
        for (int col = 0; col < dr.Table.Columns.Count; col++)
        {
            var columnName = dr.Table.Columns[col].ColumnName;
            var prop = type.GetProperty(columnName.ToUpper());
            object data = dr[col];
            prop.SetValue(vOb, data, null);
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

, , XML, SQL-. , , ( ), XML (XML ) , , XML.

0
source

All Articles