Что лучше: десериализация в объект против просто Xpathing против XML Doc? - PullRequest
0 голосов
/ 27 октября 2009

В последнее время я много занимался XML-обработкой в ​​C #, и после возвращения в C # после долгого кодирования javascript мне действительно не хватает некоторых приятных коротких путей в JS.

Я отправил большой XML-документ, состоящий из множества элементов, дочерних элементов и т. Д. Представляющие билеты на проживание / перелеты / аттракционы для онлайн-бронирования.

Пока что я только что изучил документ, чтобы достать нужную мне информацию. Теперь я начал перемещать их в вспомогательные функции. Так, например, мы можем изменить способ обработки бронирования, если у него есть рейс от третьей стороны. Это легко проверить с помощью Xpath, мы просто проверяем значение элемента. Так что у меня есть вспомогательная функция, которая делает это, поэтому мой Xpath находится только в одном месте и возвращает bool. У меня только около дюжины из них, и до сих пор я рассматривал все это как бронирование, но мы только что проделали некоторую работу, которая была посвящена элементу полета бронирования и последним 4 помощникам, которых я Я только что создал очень связанные с полетом, что заставило меня задуматься, правильно ли я делаю.

Я избежал необходимости конвертировать весь документ в Объект, поскольку это было бы очень и очень болезненно из-за его размера, и в настоящее время его не нужно, но на самом деле это не так. Создание всех этих объектов было бы огромной болью, и я работал над подобными проектами, где этот маршрут уже был пройден, и это просто больно, пытаясь отладить его или изначально обдумать его. Мы не используем весь документ, обработка, которую мы делаем, использует только 10% его, так что десериализация всего кажется немного чрезмерно сложной. Десериализация его в JS была бы легкой, но C # просто делает его таким чертовски длинным. Я знаю, что мог бы использовать XSD.exe, чтобы снять некоторые трудности, но я обнаружил, что такой беспорядок нужно использовать без хорошей схемы (которая, конечно, не существует).

Но это заставило меня задуматься, должны ли мы ВСЕГДА создавать огромную коллекцию объектов из нашего XML или быстрый способ, которым я это сделал, все еще приемлем? Я доволен этим, но просто пытаюсь продумать это, если Объекты будут лучшим способом. Если мы все это конвертируем, то, по крайней мере, оно будет доступно, если оно понадобится нам в будущих проектах.

Я знаю, что, возможно, есть некоторые комментарии о скорости xpathing всего, но это достаточно быстро для того, что нам нужно в данный момент, так что это не проблема здесь.

Есть какие-нибудь мысли, если я в порядке, чтобы продолжить XPathing?

Ответы [ 2 ]

1 голос
/ 27 октября 2009

Да, если вам нужно только 10% XML, XPathing, похоже, здесь в порядке из-за возможного избыточного десериализации.

В C # 4.0 и DLR есть ключевое слово dynamic , которое позволяет динамически исследовать структуру XML.

1 голос
/ 27 октября 2009

Если у вас есть XML-схема (XSD), то я, вероятно, всегда предпочитаю десериализацию объектному подходу - просто и проще работать с хорошими объектами CLR.

Если у вас нет схемы XML, и вы не можете получить ее от источника / поставщика ваших данных, то решение не совсем ясно. Как вы говорите, XSD.EXE может облегчить задачу, но такая логическая XML-схема, как правило, не идеальна и зачастую не очень хороша.

Трудный вопрос - если вам удобно использовать XPath для навигации по вашему XML, я бы придерживался его. Если у вас есть XML, который нужно анализировать очень часто, возможно, в конце концов создание XSD может быть хорошей идеей.

...