Что лучше: десериализация в объект против просто Xpathing против XML Doc?
В последнее время я много занимался XML-обработкой в C#, и после возвращения в C# из долгого кода на JavaScript я действительно скучаю по некоторым приятным коротким путям JS.
Я взял большой XML-документ, состоящий из множества элементов, дочерних элементов и т. Д. Представляя билеты на проживание / перелеты / аттракционы для онлайн-бронирования.
До сих пор я просто просматривал документ, чтобы извлечь нужную мне информацию. Теперь я начал перемещать их в вспомогательные функции. Так, например, мы можем захотеть изменить способ обработки бронирования, если у него есть рейс от третьей стороны. Это легко проверить с помощью Xpath, мы просто проверяем значение элемента. Так что у меня есть вспомогательная функция, которая делает это, поэтому мой Xpath находится только в одном месте и возвращает логическое значение. У меня только около дюжины из них, и до сих пор я рассматривал все это как бронирование, но мы только что проделали некоторую работу, которая была посвящена элементу полета бронирования и последним 4 помощникам, которых я Я только что создал очень связанные с полетом, что заставило меня задуматься, правильно ли я делаю.
Я избежал необходимости конвертировать весь документ в объект, так как это было бы очень и очень болезненно из-за его размера, и в настоящее время он не нужен, но на самом деле это не так. Создание всех этих объектов было бы огромной болью, и я работал над подобными проектами, где этот маршрут уже был пройден, и это просто больно, пытаясь его отладить или изначально обдумать. Мы не используем весь документ, обработка, которую мы выполняем, использует только 10%, так что десериализация всего кажется немного чрезмерно сложной. Десериализация его в JS была бы легкой задачей, но C# просто делает его таким чертовски длинным. Я знаю, что мог бы использовать XSD.exe, чтобы снять некоторые трудности, но я считаю, что такой беспорядок нужно использовать без хорошей схемы (которая, конечно, не существует).
Но это заставило меня задуматься: должны ли мы ВСЕГДА создавать огромную коллекцию объектов из нашего XML или быстрый способ, которым я это сделал, все еще приемлем? Я доволен этим, но просто пытаюсь продумать это, если Объекты будут лучшим способом. Если бы мы конвертировали все это, тогда, по крайней мере, это было бы доступно, если бы это было нужно в будущих проектах
Я знаю, что, возможно, есть некоторые комментарии о скорости xpathing всего, но это достаточно быстро для того, что мы хотим в настоящее время, так что это не проблема здесь.
Любые мысли о том, если я в порядке, чтобы продолжить XPathing?
2 ответа
Если у вас есть XML-схема (XSD), то я, вероятно, всегда предпочитаю десериализацию объектному подходу - просто и проще работать с хорошими объектами CLR.
Если у вас нет схемы XML, и вы не можете получить ее от источника / поставщика ваших данных, то решение не совсем ясно. Как ты говоришь, XSD.EXE
Это может вывести часть проблемы из уравнения, но такая логическая XML-схема, как правило, не идеальна и зачастую не очень хороша.
Трудный вопрос - если вам удобно использовать XPath для навигации по вашему XML, я бы придерживался его. Если у вас есть XML, который нужно анализировать очень часто, возможно, в конце концов, создание XSD может быть хорошей идеей.
Да, если вам нужно только 10% XML, XPathing здесь, вероятно, из-за возможного избыточного десериализации.
В C# 4.0 и DLR есть динамическое ключевое слово, которое позволяет динамически исследовать структуру XML.