Розпарсити xml-файл за допомогою c #

Добрий день. У мене в проекті ASP.NET створюється xml файл. Потім він пишеться в таблицю бази даних Oracle. Потім окремим консольним додатком я його звідти читаю і повинен розбити назад на дані по полях. І записати ці поля вже в підсумкову таблицю де вони повинні зберігатися. Ось як виглядає мій xml-ка.

А ось як я її читаю:

І мені потрібно витягнути чисто значення які між тегів. 1500 звідси потрібно витягнути тільки 1500 в змінну fuse. І так далі всю xml-ку. Можете підказати як це не складно і не затратно зробити? Може у кого то є начерки коду. Як це можна зробити. Спасибі заздалегідь.

У вашому конкретному випадку є кілька підходів.
Я постараюся описати їх максимально доступно.

1. десеріалізацію XML за допомогою XmlSerializer

Копіюєте текст цієї XML в буфер обміну.
Відкриваєте Visual Studio. меню Edit - Paste Special - Paste XML As Classes.
Студія розпарсити вашу XML-ку і створить її об'єктну модель, в даному випадку це буде всього один клас, так як XML має досить просту структуру.
У мене з'явився такий код:

В принципі з цим можна вже працювати, але я рекомендую уважно вивчити цей клас і отрефакторіть його:
По-перше, використовуючи "плюшки" сучасних версій C # можна позбутися зайвих полів, замінивши їх автосвойствамі, наприклад наступний код:

Можна замінити на одне автосвойство:

Увага, це робити потрібно тільки якщо на ваші властивості не буде накладена ніяка "бізнес-логіка".
По-друге, перевірте чи правильно студія вивела типи для ваших властивостей, наприклад, якщо Fuse може бути також негативним числом, має сенс змінити тип властивості на short / int / long замість беззнакового ushort.
І т.д.

Тепер ми можемо скористатися цією моделлю і десеріалізовать її:

Тепер у нас в steelSheet готовий об'єкт, який представляє нашу XML і їм можна користуватися:

2. Використання технології LinqToXml

У цьому підході вам не знадобиться створювати об'єктну модель вашої XML, що зменшить код, але з іншого боку ускладнить трохи логіку і не дасть зручності використання повноцінного об'єкта (типізація, підказки IntelliSense).
Давайте просто завантажимо нашу XML в об'єкт типу XDocument:

Усе! Тепер можна витягти будь-який елемент / атрибут просто пройшовши по дереву XML (головне не помилитися з іменами):

3. Використання коштів, наданих драйвером ODP.NET по вилученню полів типу XmlType

Якщо ви використовуєте новий Official Oracle ODP.NET, Managed Driver. а я вам рекомендую використовувати саме його, ви можете скористатися методом GetOracleXmlType класу OracleDataReader.
В цьому випадку вам не потрібно кастовать XmlType в рядок на стороні сервера:

тоді код читання перепишіть так:

тобто на виході отримаєте вже готовий екземпляр XmlDocument. хоча він трохи застарів і трохи більше великовагові ніж XDocument. але, з іншого боку, працювати з ним на стороні клієнта може бути вигідніше ніж кастовать XmlType в рядок на стороні сервера (а може й ні - треба перевіряти):

Схожі статті