Я читаю кучу XML-файлов в список (на самом деле IEnumerable) XElements. Затем я хочу преобразовать список XElement (эти XElements содержат кучу дочерних элементов) в список классов, поэтому я могу сделать более поздние операции с данными более легко.Создать список из XElements Динамически
Теперь, если я заранее знаю структуру XElements, это было бы легко; Я просто создаю класс, который имитирует структуру XElement и заполняет его содержимым XElement. Но вот предостережение; моя структура элемента XML-файла в основном похожа, но может существовать нечетный элемент, который имеет другую структуру. Чтобы лучше проиллюстрировать ситуацию, позвольте мне привести пример.
Предположим, что мои файлы XML содержат кучу элементов «Человек». Элементы Person имеют некоторые общие элементы, которые будут во ВСЕХ элементах, но есть некоторые дети Person, которые могут быть найдены только в некоторых элементах.
Например, все элементы Person эти обязательные детей:
<Person> <Name/> <Age/> <City/> <Country/> </Person>
Но некоторые Person элементы могут содержать дополнительные детей следующим образом:
<Person> <Name/> <Age/> <City/> <Country/> <EyeColor/> <Profession/> </Person>
Сделать вещи хуже, эти дочерние элементы также могут иметь в основном сходную структуру, которая время от времени меняется.
Итак, есть ли способ, которым я могу пройти через эти XElements всего за один цикл и поместить их в экземпляр, который каким-то образом динамически создается, скажем, на основе имен элементов или чего-то подобного? Я мог бы создать класс со всеми обязательными элементами и оставить несколько дополнительных переменных-членов для нечетных новых, но это не идеально по двум причинам; один, это было бы пустой тратой пространства, и два, может быть больше дочернего элемента, чем у меня есть дополнительные переменные в моем классе.
Так что я ищу способ создания экземпляров класса динамически, чтобы соответствовать структуре XElement. Другими словами, я бы очень хотел подражать структуре элементов вплоть до самого глубокого уровня.
Заранее благодарен!
Как правило, причина для XML - это противоположность тому, что происходит. Он должен обеспечить среду для сериализации, которая может быть проверена, как правило, была XSD. Если что-то может просто измениться «на лету» от одной вещи к следующей, что было бы ужасно для проверки данных. Я бы вместо того, чтобы идти по пути того, что у него может не быть, иметь маршрут, где вы получите все возможное, чтобы оно могло быть, а затем сделать сериализацию класса. – djangojazz
Я полностью согласен с вами здесь. Но проблема в том, что я имею дело с системой, которой я не могу ничего изменить. Другими словами, я ничего не могу сделать о структуре файлов XML. Если бы я его разработал, я бы сделал это лучше, но, увы, этого не должно быть. Так что у меня нет выбора, кроме как разобраться с ним, как есть, и найти способ решения проблемы. – Sach
Я не говорю, чтобы изменить структуру, я говорю, может ли кто-нибудь ее предоставить, и XSD, или какой-либо файл проверки? Я бы пошел по маршруту, если сказал, что у вас есть 3 свойства, и у них может быть потенциал на восемь, просто введите класс для восьми свойств. Я приведу пример в ответ. – djangojazz