Добрий день. У мене в проекті 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 в рядок на стороні сервера (а може й ні - треба перевіряти):