Подтвердить что ты не робот

Преобразование набора данных в XML

Я застрял в этой проблеме в течение нескольких часов и, похоже, не понимаю, поэтому я спрашиваю здесь:)

Хорошо, у меня есть эта функция:

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

Я пробовал всевозможные вещи, но я продолжаю получать ошибки, поэтому я оставил, как преобразовать DataSet в XML-часть.

И еще одно: этот запрос содержит столбцы со специальными символами.

4b9b3361

Ответ 1

Вы можете использовать ds.WriteXml, но для этого вам потребуется Stream. Если вы хотите вывод в строке, попробуйте этот метод расширения:

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

ПРИМЕНЕНИЕ:

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

Ответ 2

Просто используйте Dataset.getXml():

doc.LoadXml(ds.GetXml());

Ответ 3

Запишите как часть кода ниже

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

Или вы можете напрямую преобразовать dataSet так же, как сказал Oded,

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

Ответ 4

Используйте DataSet.WriteXml - он выведет набор данных в формате XML.

Ответ 5

Мы можем использовать это также

 
  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

Ответ 6

если ds - ваш набор данных.

вы можете использовать:

ds.getXml();

это помогает в получении XML