|
2 / 2 / 0
Регистрация: 27.11.2015
Сообщений: 36
|
||||||
.NET 4.x Linq to XML19.10.2018, 13:59. Показов 2555. Ответов 32
Метки нет (Все метки)
Всем привет! Возник следующий вопрос. Делаю запрос к Web-сервису и в ответ получаю XML вида:
0
|
||||||
| 19.10.2018, 13:59 | |
|
Ответы с готовыми решениями:
32
Подсчитать количтво нодов в XML при помощи LINQ to XML Объединение 2 xml файлов по ключу в 1 xml с использованием linq
|
|
Модератор
|
||||||||||||
| 22.10.2018, 16:24 | ||||||||||||
1) Я, например, НЕ знаю, что он имеет имя BodyКорневой элемент получают из свойства Root XDocument'а - это уже написал Вам AlexP11223 для консоли. Для переменной это будет так
Получение корневого элемента таким образом
doc XML данных. Если корневой элемент имеет другое имя, то root == null. Проверив это условие, Вы можете дать предупреждение об ошибке, так как отличие в имени корневого элемента обычно означает и отличия в структуре последующих данных.
1
|
||||||||||||
|
141 / 110 / 30
Регистрация: 20.04.2011
Сообщений: 582
|
|
| 22.10.2018, 16:28 | |
|
1
|
|
|
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
||||||
| 22.10.2018, 16:59 | ||||||
|
Второй элемент с неизвестным именем тоже прикольно вытаскивается
0
|
||||||
|
Модератор
|
||||||||
| 22.10.2018, 17:05 | ||||||||
|
Если Вы его формируете сами, то это одно. Вы можете задать жёсткую структуру и соответствующую его обработку. Но если источник файла сторонний, Вы должны как защитить своё приложение от исключений, так как Вы не можете гарантировать стабильность структуры XML файла. Поэтому, в этом случае, перед созданием объекта с нужными данными, Вам надо сначала проверить все ли данные в полученном файле есть. Так же, я заметил, что имена всех дочерних элементов уникальны. Можно тогда использовать получение данных элемента не зависимо от его вложенности. Это даст защиту на случай незначительных модернизаций структуры файла. Для это можно использовать XmlReader.
1
|
||||||||
|
2 / 2 / 0
Регистрация: 27.11.2015
Сообщений: 36
|
||||||||||||
| 23.10.2018, 12:53 [ТС] | ||||||||||||
|
А как ее решить? Добавлено через 14 минут На просторах интернета есть решение вида:
При создании объекта т.е:
0
|
||||||||||||
|
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|
| 23.10.2018, 12:54 | |
|
Estenity, проще всего пойти по репе настучать отправителю ))
Вообще вопросы формата согласовываются в административном порядке. Или если воруем данные из интернета, то подстраиваемся под формат "As is".
0
|
|
|
2 / 2 / 0
Регистрация: 27.11.2015
Сообщений: 36
|
|
| 23.10.2018, 12:55 [ТС] | |
|
0
|
|
|
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|
| 23.10.2018, 12:57 | |
|
Estenity, это должно быть согласовано в административном порядке, и не быть нежданчиком для разработчика.
0
|
|
|
2 / 2 / 0
Регистрация: 27.11.2015
Сообщений: 36
|
||
| 23.10.2018, 13:00 [ТС] | ||
|
Но разве это не достаточно стандартная ситуация, когда какой-то узел отсутствует в связи с отсутствием информации?
0
|
||
|
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|
| 23.10.2018, 13:04 | |
|
Estenity, это нестандартная ситуация.
Возможность отсутствия чего-то обговаривается.
0
|
|
|
Модератор
|
||||||||||||
| 23.10.2018, 13:34 | ||||||||||||
|
Один из способов, для данной ситуации, получать данные не через XDocument.Element , а используя XmlReader - это даст защиту от изменения вложенности элементов. Так же в подобном случае, я делал получение данных не только из элементов, но и одноимённых атрибутов. Такой способ является стандартным для WPF. Ещё обязательно надо предусмотреть дефолтные значения в случае отсутствия таковых в полученных данных. Так как всё это имеет отношение только к созданию объекта класса Claim и не имеет отношение к остальному приложению, всё это надо прописать в статическом методе класса, возвращающего объект в случае если его можно создать из этих данных. Класс должен выглядеть примерно так
1
|
||||||||||||
|
2 / 2 / 0
Регистрация: 27.11.2015
Сообщений: 36
|
|||||||
| 23.10.2018, 15:14 [ТС] | |||||||
|
Не совсем понял, что тут надо проверять. Наличие необязательных узлов? Если да, то таким образом?
Добавлено через 44 минуты Все это, конечно, можно обернуть в метод и выглядит уже лучше, но опять же вызывать для каждого узла метод проверки
0
|
|||||||
|
Модератор
|
||||||||
| 23.10.2018, 15:48 | ||||||||
|
Я могу только привести в пример один из своих алгоритмов.
Добавлено через 9 минут Получить данные просто - считал и присвоил. А корректность данных намного сложнее, надо установить все возможные варианты сочетания данных, их отсутствия и проверить их допустимость. И делать это надо, конечно, не в основном коде, а в методе класса. Обязательно в статическом, а не в конструкторе. Так как конструктор сначала создаёт объект, а потом только начинает работу. А в алгоритме надо предусмотреть вариант, когда невозможно с этими данными создать объект. Всё это делается, для того чтобы в дальнейшем можно было использовать этот класс и его объекты в приложении без больших заморочек и уверенностью, что раз объект создан, то данные в нём корректны. Добавлено через 9 минут Вот допустим простенький класс из реального моего приложения
Добавлено через 4 минуты 20 строк - это комментарии и директивы препроцессора. А без них тоже нельзя. Иначе код будет непрозрачным и трудно модернезируемым.
0
|
||||||||
| 23.10.2018, 15:48 | |
|
Linq to XML парсинг
LINQ to XML - поиск по атрибуту Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|