Чтение нескольких файлов XML в структуру класса XML - PullRequest
0 голосов
/ 05 июля 2018

Я бы хотел прочитать и десериализовать более одного файла XML в мою структуру классов XML, учитывая список строк, состоящий из имен файлов. Очевидно, что при чтении ОДНОГО XML-файла вы можете пойти так:

XmlRoot file = null;
XmlSerializer ser = new XmlSerializer(typeof(XmlRoot));
using (XmlReader read = XmlReader.Create(FileName))
{
    file = (XmlRoot)ser.Deserialize(read);
{

Что будет десериализовать файл XML в структуру класса?

Невозможно иметь список с именами файлов и использовать цикл foreach для их перебора, считывания и десериализации по одному, поскольку это теоретически приведет к считыванию, десериализации и репликации нескольких корневых элементов в структуре класса.

В общем, я бы хотел десериализовать каждый файл и добавить необходимые главные элементы в корневой объект.

Кто-нибудь знает, как этого добиться? Это было бы очень полезно.

Заранее спасибо!

PS: Извините за мой английский, так как я не являюсь носителем языка. Если вам нужна дополнительная информация, просто скажите мне!

1 Ответ

0 голосов
/ 06 июля 2018

Мне удалось решить проблему для себя. Сначала я создал XDocument для первого файла, который я прочитал, затем перебираю другие документы, создавая новый XDocument для каждого файла XML, и пытаюсь получить элементы после корня (в моем случае это язык) и добавить его в корень файла. XDocument создан вне цикла.

        XDocument lDoc = new XDocument();
        int counter = 0;
        foreach (var fileName in multipleFileNames)
        {
            try
            {
                counter++;
                if (lCounter <= 1)
                {
                    doc = XDocument.Load(fileName);
                }
                else
                {
                    XDocument doc2 = XDocument.Load(fileName);
                    IEnumerable<XElement> elements = doc2.Element("Language")
                        .Elements();

                    doc.Root.Add(elements);
                }
            }
            return Deserialize(lDoc);

После этого я вызываю метод Deserialize, десериализацию моего созданного XDocument следующим образом:

    public static XmlLanguage Deserialize(XDocument doc)
    {
        XmlSerializer ser = new XmlSerializer(typeof(XmlLanguage));
        return (XmlLanguage)ser.Deserialize(doc.CreateReader());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...