使用模型C#从数据库创建XML文件

时间:2019-04-23 19:22:21

标签: c# xml winforms entity-framework

因此,我需要创建一种从数据库中生成XML文件的方法,我已经编写了存储过程,该存储过程可以从数据库中获取XML信息,现在只需要编写将数据库转换为一个XML文件,它使用了我作为节点编写的另一个类的属性。

public string CreateXML(Object YourClassObject){    
      XmlDocument xmlDoc =new XmlDocument();   //Represents an XML document, 
                // Initializes a new instance of the XmlDocument class.          
      XmlSerializer xmlSerializer = new XmlSerializer(YourClassObject.GetType());            
    // Creates a stream whose backing store is memory. 
       using (MemoryStream xmlStream =new MemoryStream())
       { 
        xmlSerializer.Serialize(xmlStream, YourClassObject);
        xmlStream.Position = 0;
        //Loads the XML document from the specified string.
        xmlDoc.Load(xmlStream); 
        return xmlDoc.InnerXml;
       }
}

这是我在网上找到的一些代码,我想可以用来序列化模型,但是我正在通过创建的事件访问数据库(明天上班时将提供代码)。无论如何,我正在访问数据库,例如以下e.DataTable。有任何想法吗?

我的模型如下所示:

public class DataModel
{
string Sifra {get; set;}
public string Naziv {get; set;}
public string JM {get; set;}
public int Kolicina {get; set;}
public float Cena_x0020_vp {get; set;}
public float Cena_x0020_mp {get; set;}
public float Cena_x0020_bod {get; set;}
public string Slika {get; set;}
public string Grupa {get; set;}
}

这是我生成的XML外观的一个示例。

<?xml version="1.0" encoding="UTF-8"?>

<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2019-04-17T19:13:54">

<row>

<Sifra>ADA110-100</Sifra>

<Naziv_x0020_artikla>Adapter 220/110VAC 100W</Naziv_x0020_artikla>

<JM>kom</JM>

<Kolicina>1</Kolicina>

<Cena_x0020_vp>2683.33</Cena_x0020_vp>

<Cena_x0020_mp>3220</Cena_x0020_mp>

<Cena_x0020_bod>28</Cena_x0020_bod>

<Slika1> ada110v.jpg</Slika1>

<Grupa>Adateri 110V AC</Grupa>

</row>

4 个答案:

答案 0 :(得分:0)

为什么不让存储过程为您返回xml。存储过程中的查询将大声如下:

SELECT Sifra, Naziv, JM, Kolicina, Cena_x0020_vp, Cena_x0020_mp, Cena_x0020_bod, Slika, Grupa 
FROM DataModel
FOR XML AUTO

答案 1 :(得分:0)

创建一个方法,该方法接受Models的列表或IEnumerable对象,并返回包含XML的字符串(未经测试,但应该开始使用),这是假定您已经在可用对象中包含数据库数据了:

 [[pdoMenu?
&parentClass=`dropdown`
&innerClass=`dropdown-menu`
&level=`2`
&parents=`0`
&startId=`0`
&lastClass=`0`
&firstClass=`0`
&tplInnerRow=`@INLINE <li [[+classnames]]"><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>`]]

答案 2 :(得分:0)

使用XML序列化器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication110
{
    class Program
    {
        const string INPUT_FILENAME = @"c:\temp\test.xml";
        const string OUTPUT_FILENAME = @"c:\temp\test1.xml";
        static void Main(string[] args)
        {
             XmlReader reader = XmlReader.Create(INPUT_FILENAME);

            string xml = reader.ToString();
            XmlSerializer serializer = new XmlSerializer(typeof(DataRoot));
            DataRoot root = (DataRoot)serializer.Deserialize(reader);

            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            XmlWriter writer = XmlWriter.Create(OUTPUT_FILENAME,settings);
            serializer.Serialize(writer, root);
        }
    }
    [XmlRoot(ElementName = "dataroot", Namespace = "")]
    public class DataRoot
    {
        [XmlElement(ElementName = "row", Namespace = "")]
        public List<DataModel> rows { get; set; }
    }
    [XmlRoot(ElementName = "row", Namespace = "")]
    public class DataModel
    {

        string Sifra { get; set; }
        public string Naziv { get; set; }
        public string JM { get; set; }
        public int Kolicina { get; set; }
        public float Cena_x0020_vp { get; set; }
        public float Cena_x0020_mp { get; set; }
        public float Cena_x0020_bod { get; set; }
        public string Slika { get; set; }
        public string Grupa { get; set; }
    }


}

答案 3 :(得分:0)

问题已解决:

    private void CreateXML(DataTable dataTable)
    {                   
        var list = new List<Row>();

        XmlSerializer writer = new XmlSerializer(typeof(List<Row>));

        var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\ExportZaWeb.xml";
        FileStream file = File.Create(path);

        foreach (DataRow row in dataTable.Rows)
        {
            Row r = new Row();

            r.Naziv = row["Naziv Artikla"].ToString();
            r.JM = row["JM"].ToString();
            r.Kolicina = row["Kolicina"].ToString();
            r.Cena_x0020_vp = row["Cena vp"].ToString();
            r.Cena_x0020_mp = row["Cena mp"].ToString();
            r.Cena_x0020_bod = row["Cena bod"].ToString();
            r.Slika = row["Slika1"].ToString();
            r.Grupa = row["Grupa"].ToString();

            list.Add(r);
        }

        writer.Serialize(file, list);
        file.Close();
    }