Что может быть лучше:Десериализовать в Object вместо простого сопоставления Xpath с XML-документом?

StackOverflow https://stackoverflow.com/questions/1630164

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top