web-dev-qa-db-fra.com

Convertir un jeu de données en XML

Cela fait quelques heures que je suis coincé dans ce problème et je n'arrive pas à comprendre, alors je pose la question ici :)

Bon, j'ai cette fonction:

private void XmlDump()
{
    XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
    XElement rootElement = new XElement("dump");
    rootElement.Add(TableToX("Support"));

    string connectionString = ConfigurationManager.ConnectionStrings["MyDb"].ConnectionString;
    SqlConnection con = new SqlConnection(connectionString);
    string sql = "select * from support";
    SqlDataAdapter da = new SqlDataAdapter(sql, con);

    DataSet ds = new DataSet("Test");
    da.Fill(ds, "support");

    // Convert dataset to XML here

    var docresult = // Converted XML

    Response.Write(docResult);
    Response.ContentType = "text/xml; charset=utf-8";
    Response.AddHeader("Content-Disposition", "attachment; filename=test.xml");
    Response.End();
}

J'ai essayé toutes sortes de choses, mais je continue à avoir des erreurs, alors j'ai laissé en blanc la procédure de conversion de DataSet en partie XML.

Et une autre chose, cette requête contient des colonnes avec des caractères spéciaux.

13
NomenNescio

Vous pouvez utiliser ds.WriteXml, mais cela nécessitera que vous ayez une Stream dans laquelle placer la sortie. Si vous voulez que la sortie apparaisse dans une chaîne, essayez cette méthode d'extension:

public static class Extensions
{
    public static string ToXml(this DataSet ds)
    {
        using (var memoryStream = new MemoryStream())
        {
            using (TextWriter streamWriter = new StreamWriter(memoryStream))
            {
                var xmlSerializer = new XmlSerializer(typeof(DataSet));
                xmlSerializer.Serialize(streamWriter, ds);
                return Encoding.UTF8.GetString(memoryStream.ToArray());
            }
        }
    }
}

UTILISATION:

var xmlString = ds.ToXml();
// OR
Response.Write(ds.ToXml());
26
Abdul Munim

Utilisez simplement Dataset.getXml():

doc.LoadXml(ds.GetXml());
11
Venkat

Ecrivez comme ci-dessous la partie de code

DataTable dt = new DataTable("MyData");
dt.WriteXml(@Application.StartupPath + "\\DataBaseValues.xml");

Ou, vous pouvez convertir directement le dataSet aussi comme dit par Oded comme,

private void WriteXmlToFile(DataSet thisDataSet)
{
   if (thisDataSet == null) 
   {
      return;
   }

   // Create a file name to write to.
   string filename = "myXmlDoc.xml";

   // Create the FileStream to write with.
   System.IO.FileStream myFileStream = new System.IO.FileStream(filename, System.IO.FileMode.Create);

   // Create an XmlTextWriter with the fileStream.
   System.Xml.XmlTextWriter myXmlWriter = 
   new System.Xml.XmlTextWriter(myFileStream, System.Text.Encoding.Unicode);

   // Write to the file with the WriteXml method.
   thisDataSet.WriteXml(myXmlWriter);   
   myXmlWriter.Close();
}

Utilisez DataSet.WriteXml - le jeu de données sera généré au format XML.

2
Oded

si ds est votre jeu de données ..

vous pouvez utiliser:

ds.getXml();

cela aide à obtenir du XML 

0
venkk

Essaye ça. Cela a fonctionné pour moi.

static XmlDocument xdoc = new XmlDocument(); //static; since i had to access this file someother place too
protected void CreateXmlFile(DataSet ds) 
    {
      //ds contains sales details in this code; i.e list of products along with quantity and unit
      //You may change attribute acc to your needs ; i.e employee details in the below code

        string salemastid = lbl_salemastid.Text;
        int i = 0, j=0;
        String str = "salemastid:" + salemastid;
        DataTable dt = ds.Tables[0];
        string xml = "<Orders>" ;
         while (j < dt.Rows.Count)
         {
             int slno = j + 1;
             string sl = slno.ToString();
             xml += "<SlNo>" + sl +"</SlNo>" +
                       "<PdtName>" + dt.Rows[j][0].ToString() + "</PdtName>" +
                       "<Unit>" + dt.Rows[j][1].ToString() + "</Unit>" +
                       "<Qty>" + dt.Rows[j][2].ToString() + "</Qty>";
             j++;
         }
         xml += "</Orders>";

         xdoc.LoadXml(xml);
         //Here the xml is prepared and loaded in xml DOM.

         xdoc.Save(Server.MapPath("Newsales.xml"));
         //You may also use some other names instead of 'Newsales.xml'

         //to get a downloadable file use the below code
         System.IO.MemoryStream stream = new System.IO.MemoryStream();
                XmlTextWriter xwriter = new XmlTextWriter(stream, System.Text.Encoding.UTF8);

                xdoc.WriteTo(xwriter);
                xwriter.Flush();
                Response.Clear();
                Encoding.UTF8.GetString(stream.ToArray());
                byte[] byteArray = stream.ToArray();
                Response.AppendHeader("Content-Disposition", "filename=OrderRequest.xml");
                Response.AppendHeader("Content-Length", byteArray.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.BinaryWrite(byteArray);
                xwriter.Close();
                stream.Close();

        } 
0
S.Mohamed

Nous pouvons utiliser cela aussi

  
 Fonction privée DsToXML (DataSet ds) en tant que System.Xml.XmlDataDocument 

 Dim xmlDoc As System.Xml.XmlDataDocument 
 Dim xmlDec As System.Xml.XmlDeclaration 
 Dim xmlWriter As System.Xml.XmlWriter 
 xmlWriter = Nouveau XmlTextWriter (context.Response.OutputStream, System.Text.Encoding.UTF8) 

 xmlDoc = New System.Xml.XmlDataDocument (ds) 
 xmlDoc.DataSet.EnforceConstraints = False 
 xmlDec = xmlDoc.CreateXmlDeclaration ("1.0", "UTF-8", rien) 
 xmlDoc.PrependChild (xmlDec) 
 xmlDoc.WriteTo (xmlWriter) 
 Récupérer xmlDoc 
 Eonction finale 
0
Pinaki Mukherjee