2011-12-05 8 views
13

Sono stato bloccato con questo problema per un paio d'ore e non riesco a capirlo, quindi mi sto chiedendo qui :)Convert to XML Dataset

Va bene, ho questa funzione:

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

ho cercato tutti i tipi di cose diverse, ma continuo a ricevere errori, così ho lasciato il come convertire DataSet a parte XML vuoto.

E un'altra cosa, questa query contiene le colonne con caratteri speciali.

risposta

24

È possibile utilizzare ds.WriteXml, ma questo richiederà di avere un Stream in cui inserire l'output. Se si desidera che l'uscita in una stringa, provare questo metodo di estensione:

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()); 
+0

Sì, funziona, ma i caratteri speciali appaiono come punti interrogativi, c'è un modo per aggirare questo? – NomenNescio

+0

Probabilmente a causa della codifica ASCII. Prova con 'Encoding.UTF8'. Aggiornamento del codice ora –

+0

Siamo spiacenti, questo dovrebbe essere UTF8 –

5

scrivere come sottostante Codice parte

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

In alternativa, è possibile convertire direttamente la dataSet anche come detto da Oded come,

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

Semplicemente utilizzare Dataset.getXml():

doc.LoadXml(ds.GetXml()); 
0

possiamo usare anche questo

 
    Private Function DsToXML(DataSet ds) as System.Xml.XmlDataDocument 

    Dim xmlDoc As System.Xml.XmlDataDocument 
    Dim xmlDec As System.Xml.XmlDeclaration 
    Dim xmlWriter As System.Xml.XmlWriter 
    xmlWriter = New 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", Nothing) 
    xmlDoc.PrependChild(xmlDec) 
    xmlDoc.WriteTo(xmlWriter) 
    Retuen xmlDoc 
    End Eunction 
0

se DS è l'insieme di dati ..

si può usare:

ds.getXml(); 

questo aiuta a ottenere XML

+0

[Sopra la risposta] (http://stackoverflow.com/a/11633050/4519059) è simile;). –