Как создать XML-файл с определенной структурой из таблиц данных? - PullRequest
1 голос
/ 06 декабря 2011

Q:

По выбору пользователя я получу набор Datatables из базы данных.

У меня есть три базы данных: Teachers, Subjects, ClassRooms

и я хочу xml-файл со следующей структурой:

<timetable importtype="database" options="idprefix:id">

<teachers options="" columns="id,name,short">

</teachers>

<subjects options="" columns="id,name,short">

</subjects>

<classrooms options="" columns="id,name,short">

</classrooms>

</timetable>

Теперь Как создать XML-файл с предыдущей структурой и заполнить данные XML-файла из таблиц данных?

например:

<teachers options="" columns="id,name,short">
<teacher id="a" name="jhon" short="jo"/>
<teacher id="b" name="philips" short="Ph"/>
<teacher id="c" name="sara" short="Sa"/>
</teachers>

С teacher datatable.

пожалуйста, ответьте подробно с примером примера.

РЕДАКТИРОВАТЬ:

 private static void ConvertDataTableToXML(string schemaFile, DataTable dtTeacher, DataTable dtSubject, DataTable dtClassRoom)
        {
            XDocument doc = new XDocument();
            //Read the teachers element from xml schema file
            XElement teachers = XDocument.Load(schemaFile).Descendants("teachers").SingleOrDefault();
            XElement subjects = XDocument.Load(schemaFile).Descendants("subjects").SingleOrDefault();
            XElement classes = XDocument.Load(schemaFile).Descendants("classrooms").SingleOrDefault();

            if (teachers != null)
            {
                foreach (DataRow row in dtTeacher.Rows)
                {
                    XElement teacher = new XElement("teacher");
                    teacher.SetAttributeValue("id", row["id"]);
                    teacher.SetAttributeValue("name", row["name"]);
                    teacher.SetAttributeValue("short", row["name"].ToString().Substring(0, 2));
                    teachers.Add(teacher);
                }
            }

            if (subjects != null)
            {
                foreach (DataRow row in dtSubject.Rows)
                {
                    XElement subject = new XElement("subject");
                    subject.SetAttributeValue("id", row["num"]);
                    subject.SetAttributeValue("name", row["name"]);
                    subject.SetAttributeValue("short", row["name"].ToString().Substring(0, 2));

                    subjects.Add(subject);
                }
            }

            if (classes != null)
            {
                foreach (DataRow row in dtClassRoom.Rows)
                {
                    XElement cls = new XElement("classroom");
                    cls.SetAttributeValue("id", row["id"]);
                    cls.SetAttributeValue("name", row["name"]);
                    cls.SetAttributeValue("short", row["name"].ToString().Substring(0, 2));

                    classes.Add(cls);
                }

            }

            XElement xml = new XElement("timetable",
                                 new XAttribute("importtype", "database"),
                                 new XAttribute("options", "idprefix:id"),teachers,subjects,classes
                         );
            doc.Add(xml);
            string dirPath = System.Web.HttpContext.Current.Server.MapPath("~/import");
            string targetFileName = Path.Combine(dirPath, "import.xml");
            int counter = 1;
            while (System.IO.File.Exists(targetFileName))
            {
                counter++;
                targetFileName = Path.Combine(dirPath,
                    "import" + counter.ToString() + ".xml");
            }

            doc.Save(targetFileName);
        }

1 Ответ

1 голос
/ 06 декабря 2011

Вы можете попробовать прочитать и обновить документ XML с помощью Linq-XML.

Посмотрите на образец:

//Read the teachers element from xml schema file
XElement teachers = XDocument.Load(schemaFile).Descendants("teachers").SingleOrDefault();

if (teachers != null)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("id");
    dt.Columns.Add("name");


    dt.Rows.Add("1", "john");
    dt.Rows.Add("2", "philips");
    dt.Rows.Add("3", "sara");

    XDocument doc = new XDocument();
    foreach (DataRow row in dt.Rows)
    {
        XElement teacher = new XElement("teacher");
        teacher.SetAttributeValue("id", row["id"]);
        teacher.SetAttributeValue("name", row["name"]);
        teacher.SetAttributeValue("short", row["name"].ToString().Substring(0,2));

        teachers.Add(teacher);
    }
    doc.Add(teachers);
    doc.Save(newFilename);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...