Convierta Dataset a XML

He estado atascado con este problema durante unas horas y parece que no puedo resolverlo, así que estoy preguntando aquí 🙂

Bien, tengo esta función:

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

He estado probando todo tipo de cosas diferentes pero sigo recibiendo errores, así que dejé la forma de convertir DataSet a XML en blanco.

Y otra cosa, esta consulta contiene columnas con caracteres especiales.

Puede usar ds.WriteXml , pero eso requerirá que tenga un Stream para poner la salida. Si desea el resultado en una cadena, intente con este método de extensión:

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

USO:

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

Simplemente use Dataset.getXml() :

 doc.LoadXml(ds.GetXml()); 

Escribir como parte del código debajo

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

O bien, puede convertir directamente el conjunto de dataSet también como dice Oded like,

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

Use DataSet.WriteXml : generará el conjunto de datos como XML.

Podemos usar esto también

 
   Función privada DsToXML (DataSet ds) como System.Xml.XmlDataDocument

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

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

si ds es tu conjunto de datos …

puedes usar:

 ds.getXml(); 

esto ayuda a obtener XML

Prueba esto. Funcionó para mí

 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; ie list of products along with quantity and unit //You may change attribute acc to your needs ; ie 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 = "" ; while (j < dt.Rows.Count) { int slno = j + 1; string sl = slno.ToString(); xml += "" + sl +"" + "" + dt.Rows[j][0].ToString() + "" + "" + dt.Rows[j][1].ToString() + "" + "" + dt.Rows[j][2].ToString() + ""; j++; } xml += ""; 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(); }