webentwicklung-frage-antwort-db.com.de

Konvertieren Sie das Dataset in XML

Ich bin seit ein paar Stunden mit diesem Problem beschäftigt und kann es nicht verstehen, also frage ich hier :)

Okay, ich habe diese Funktion:

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();
}

Ich habe alle möglichen Dinge ausprobiert, aber ich bekomme immer wieder Fehler. Daher habe ich die Konvertierung von DataSet in XML-Teil leer gelassen.

Außerdem enthält diese Abfrage Spalten mit Sonderzeichen.

13
NomenNescio

Sie können ds.WriteXml verwenden, aber dazu benötigen Sie eine Stream, um die Ausgabe zu platzieren. Wenn Sie die Ausgabe in einer Zeichenfolge haben möchten, versuchen Sie diese Erweiterungsmethode:

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());
            }
        }
    }
}

VERWENDUNGSZWECK:

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

Verwenden Sie einfach Dataset.getXml():

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

Schreiben Sie wie unter dem Codeteil

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

Oder Sie können die dataSet auch direkt konvertieren, wie von Oded gesagt:

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();
}

Mit DataSet.WriteXml - wird die Datenmenge als XML ausgegeben.

2
Oded

wenn ds ist dein datensatz ..

sie können verwenden:

ds.getXml();

dies hilft beim Abrufen von XML 

0
venkk

Versuche dies. Es hat für mich funktioniert.

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

Wir können das auch benutzen

  
 Private Funktion DsToXML (DataSet ds) als System.Xml.XmlDataDocument 

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

 xmlDoc = Neues System.Xml.XmlDataDocument (ds) 
 xmlDoc.DataSet.EnforceConstraints = False 
 xmlDec = xmlDoc.CreateXmlDeclaration ("1.0", "UTF-8", Nothing) 
 xmlDoc.PrependChild (xmlDec) 
 xmlDoc.WriteTo (xmlWriter) 
 Retuen xmlDoc 
 Endefunktion 
0