Способи обробки xml c. Як відкрити XML-документ – особливості роботи з XML-файлами. Створення XML-елемента з дочірніми елементами




Extensible Markup Language (XML). Це дійсно просто текстові файли, які використовують теги користувача для опису структури та інших функцій документа.

Що таке XML

XML– це мова розмітки, створена консорціумом World Wide Web Consortium (W3C) для визначення синтаксису кодування документів, які можна прочитати людьми і машинами. Він робить це за допомогою тегів, які визначають структуру документа, а також те, як документ повинен зберігатись та транспортуватися.

Найпростіше порівняти його з іншою мовою розмітки, з якою ви можете бути знайомі, – мова гіпертекстової розмітки(HTML), який використовується для кодування веб-сторінок. HTML використовує набір символів розмітки (короткі коди), які описують формат вмісту на веб-сторінці.

Однак, відмінність XML в тому, що він розширюється. XML не має визначеної мови розмітки, як HTML. Натомість XML дозволяє користувачам створювати власні символи розмітки для опису контенту, формуючи необмежений і самовизначений набір символів.

По суті, HTML – це мова, яка фокусується на поданні контенту, в той час як XML – це виділена мова опису даних, яка використовується для зберігання даних.

XML часто використовується як основа для інших форматів документів, яких сотні. Ось кілька, які ви можете дізнатися:

  • RSS та ATOM описують, як програми повинні обробляти веб-канали.
  • Microsoft .NET використовує XML для конфігураційних файлів.
  • Microsoft Office використовує XML як основу структури документа.

Таким чином, якщо у вас є XML-файл, це не обов'язково каже Вам, для якого додатку він призначений. Втім, Вам і не потрібно турбуватися про це, якщо ви не розробляєте XML-файли.

Як відкрити XML-файл

Існує кілька способів відкрити XML-файл безпосередньо. Ви можете відкривати та редагувати їх за допомогою будь-якого текстового редактора, переглядати їх за допомогою будь-якого веб-браузера або використовувати веб-сайт, який дозволяє переглядати, редагувати і навіть конвертувати їх в інші формати.

Використовуйте текстовий редактор під час регулярної роботи з XML

Оскільки XML-файли – це просто текстові файли, їх можна відкрити у будь-якому текстовому редакторі. Однак багато текстових редакторів, таких як Notepad, просто не призначені для відображення XML-файлів з їх правильною структурою. Це може бути корисним для швидкого ознайомлення зі змістом XML-файлу. Але, існують зручніші інструменти для роботи з ними.


Використання веб-браузера для перегляду файлу XML

Якщо Вам не потрібно редагувати XML-файл, але просто потрібно переглянути вміст, з цим завданням упорається ваш браузер. Більш того, ваш веб-браузер, швидше за все, вже налаштований як стандартний засіб перегляду файлів XML. Таким чином, подвійне клацання XML-файлу має відкрити його у браузері.

Якщо ні, ви можете клацнути правою кнопкою миші файл, щоб знайти варіанти його відкриття з будь-якою іншою програмою. Просто виберіть веб-браузер зі списку програм.

Коли файл відкриється, потрібно побачити добре структуровані дані. Це не так красиво, як кольоровий вигляд, який ви отримуєте в Notepad++, але набагато краще ніж блокнот.

Використання онлайн-редактора для файлів XML

Якщо ви бажаєте редагувати випадковий XML-файл і не бажаєте завантажувати новий текстовий редактор, або Вам потрібно конвертувати XML-файл в інший форматіснує кілька гідних онлайн-редакторів XML, доступних безкоштовно.

TutorialsPoint.com, XMLGrid.net та CodeBeautify.org – дозволяють переглядати та редагувати XML-файли. Після завершення редагування можна завантажити змінений файл XML або навіть перетворити його на інший формат.

Наприклад, використовуємо CodeBeautify.org. Сторінка розділена на три розділи. Зліва знаходиться XML-файл, з яким ви працюєте. Всередині ви знайдете кілька функцій. Праворуч ви побачите результати деяких варіантів, які можна вибрати.

Наприклад, на малюнку нижче зліва знаходиться наш повний XML-файл, а на панелі результатів відображається представлення у вигляді дерева, тому що ми натиснули кнопку Tree View посередині.

Використовуйте кнопку Browse для завантаження XML-файлу з комп'ютера або кнопку Load URL для вилучення XML з інтернет-джерела

Кнопка Tree View відображає дані в добре відформатованій деревоподібній структурі на панелі результатів, з усіма тегами, виділеними помаранчевим кольором, та атрибутами праворуч від тегів.

Beatify відображає ваші дані в акуратному вигляді, що легко читається.

Кнопка Minify відображає ваші дані, використовуючи найменшу кількість пробілів. Ця функція розмістити кожен кожен шматок даних на одному рядку. Це стане в нагоді при спробі зробити файл менше, що заощадить деякий простір.

І, нарешті, Ви можете використовувати кнопку XML to JSON для перетворення XML у формат JSON, та кнопку Export to CSV для збереження даних у вигляді файлу значень, розділених комами, або кнопку Download для завантаження будь-яких змін, які ви зробили в новому XML-файлі .

Ймовірно, ви чули про мову XML і вам відомо безліч причин, з яких її необхідно використовувати у вашій організації. Але що саме є XML? У статті пояснюється, що таке XML і як він працює.

В цій статті

Позначки, розмітка та теги

Щоб зрозуміти XML, корисно згадати, як можна помічати дані. Документи створювалися людьми протягом багатьох століть, і протягом усього цього часу люди робили у них позначки. Наприклад, вчителі часто роблять позначки в роботах учнів, вказуючи на необхідність перемістити абзаци, зробити пропозицію більш зрозумілою, виправити орфографічні помилки тощо. Якщо ви коли-небудь використовували виправлення в Microsoft Office Word, ви знайомі з комп'ютеризованою формою додавання позначок.

У світі інформаційних технологій термін "помітка" перетворився на термін "розмітка". При розмітці використовуються коди, які називаються тегами (або іноді токенами), для визначення структури, візуального оформлення і - у разі XML - сенсу даних.

Текст цієї статті у форматі HTML є добрим прикладом застосування комп'ютерної розмітки. Якщо в Microsoft Internet Explorer клацнути цю сторінку правою кнопкою миші та вибрати команду Перегляд HTML-коду, ви побачите читаний текст і теги HTML, наприклад

І

. У HTML- та XML-документах теги легко розпізнати, оскільки вони укладені у кутові дужки. У вихідному тексті цієї статті теги HTML виконують безліч функцій, наприклад, визначають початок і кінець кожного абзацу (

...

) та місце розташування малюнків.

Відмінні риси XML

Документи у форматах HTML і XML містять дані, укладені в теги, але подібність між двома мовами закінчується. У форматі HTML теги визначають оформлення даних - розташування заголовків, початок абзацу і т. д. У форматі XML теги визначають структуру та зміст даних - те, чим вони є.

При описі структури та змісту даних стає можливим їхнє повторне використання декількома способами. Наприклад, якщо у вас є блок даних про продаж, кожен елемент у якому чітко визначений, то можна завантажити у звіт про продажі лише необхідні елементи, а інші дані передати до бухгалтерської бази даних. Інакше кажучи, можна використовувати одну систему для генерації даних та позначки їх тегами у форматі XML, а потім обробляти ці дані в будь-яких інших системах, незалежно від клієнтської платформи або операційної системи. Завдяки такій сумісності XML є основою однієї з найпопулярніших технологій обміну даними.

Враховуйте під час роботи наступне:

    HTML не можна використовувати замість XML. Однак XML-дані можна укладати в HTML-теги та відображати на веб-сторінках.

    Можливості HTML обмежені певним набором тегів, загальним всім користувачів.

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

    Izzy Siamese 6 yes no Izz138bod Colin Wilcox

Як видно, за тегами XML зрозуміло, які дані ви переглядаєте. Наприклад, ясно, що це дані про кота, і можна легко визначити його ім'я, вік і т. д. Завдяки можливості створювати теги, що визначають майже будь-яку структуру даних, мова XML розширюється.

Але не плутайте теги в цьому прикладі з тегами в HTML-файлі. Наприклад, якщо наведений вище текст у форматі XML вставити в HTML-файл і відкрити його в браузері, результати будуть виглядати наступним чином:

Izzy Siamese 6 yes no Izz138bod Colin Wilcox

Веб-браузер проігнорує теги XML і відображає лише дані.

Правильно сформовані дані

Ймовірно, ви чули, як хтось із ІТ-фахівців говорив про "правильно сформований" XML-файл. Правильно сформований XML-файл має відповідати дуже строгим правилам. Якщо вона не відповідає цим правилам, XML не працює. Наприклад, у попередньому прикладі кожен тег, що відкриває, має відповідний закриває тег, тому в даному прикладі дотримано одне з правил правильно сформованого XML-файлу. Якщо ж видалити з файлу якийсь тег і спробувати відкрити його в одній із програм Office, з'явиться повідомлення про помилку і використовувати такий файл буде неможливо.

Правила створення правильно сформованого XML-файлу знати необов'язково (хоча зрозуміти їх неважко), але слід пам'ятати, що використовувати інші програми і системи можна лише правильно сформовані XML-данные. Якщо XML-файл не відкривається, він, ймовірно, неправильно сформований.

XML не залежить від платформи, і це означає, що будь-яка програма, створена для використання XML, може читати та обробляти дані XML незалежно від обладнання або операційної системи. Наприклад, при застосуванні правильних тегів XML можна використовувати програму на настільному комп'ютері для відкриття та обробки даних, отриманих з мейнфрейму. І, незалежно від того, хто створив XML-дані, з ними можна працювати в різних програмах Office. Завдяки своїй сумісності XML став однією з найпопулярніших технологій обміну даними між базами даних та комп'ютерами користувача.

На додаток до правильно сформованих даних з тегами XML-системи зазвичай використовують два додаткові компоненти: схеми та перетворення. У наступних розділах описується, як вони працюють.

Схеми

Не лякайтеся терміну "схема". Схема - це XML-файл, що містить правила для вмісту XML-файлу даних. Файли схем мають розширення XSD, тоді як для файлів даних XML використовується розширення XML.

Схеми дозволяють програмам перевіряти дані. Вони формують структуру даних та забезпечують їхню зрозумілість творцю та іншим людям. Наприклад, якщо користувач вводить неприпустимі дані, наприклад текст у полі дати, програма може запропонувати виправити їх. Якщо дані в XML-файлі відповідають правилам у схемі, для їх читання, інтерпретації та обробки можна використовувати будь-яку програму, яка підтримує XML. Наприклад, як показано на наведеному нижче малюнку, Excel може перевіряти дані на відповідність до схеми CAT.

Схеми може бути складними, й у статті неможливо пояснити, як їх створювати. (Крім того, швидше за все, у вашій організації є ІТ-фахівці, які знають, як це робити). Проте корисно знати, як виглядають схеми. Наступна схема визначає правила для набору тегів ... :

Не турбуйтеся, якщо на прикладі не все зрозуміло. Просто зверніть увагу на таке:

    Рядкові елементи у наведеному прикладі схеми називаються оголошеннями. Якби були потрібні додаткові відомості про тварину, наприклад, її колір або особливі ознаки, то фахівці відділу ІТ додали б до схеми відповідні оголошення. Систему XML можна змінювати у міру розвитку потреб бізнесу.

    Оголошення є потужним засобом керування структурою даних. Наприклад, оголошення означає, що теги, такі як і , повинні слідувати у вказаному вище порядку. За допомогою об'яв можна також перевіряти типи даних, що вводяться користувачем. Наприклад, наведена вище схема вимагає введення позитивного цілого числа віку кота і логічних значень (TRUE або FALSE) для тегів ALTERED і DECLAWED.

    Якщо дані у XML-файлі відповідають правилам схеми, такі дані називають допустимими. Процес контролю відповідності XML-файлу даних правилам схеми називають (досить логічно) перевіркою. Великою перевагою використання схем є можливість запобігти за допомогою пошкодження даних. Схеми також полегшують пошук пошкоджених даних, оскільки при виникненні такої проблеми обробка файлу XML зупиняється.

Перетворення

Як говорилося вище, XML також дозволяє ефективно використовувати та повторно використовувати дані. Механізм повторного використання даних називається перетворенням XSLT (або просто перетворенням).

Ви також можете використовувати перетворення для обміну даними між серверними системами, наприклад між базами даних. Припустимо, що в базі даних А дані про продаж зберігаються в таблиці, зручній для відділу продажу. У базі даних Б зберігаються дані про доходи та витрати у таблиці, спеціально розробленої для бухгалтерії. База Б може використовувати перетворення, щоб прийняти дані від бази даних A і помістити їх у відповідні таблиці.

Поєднання файлу даних, схеми та перетворення утворює базову систему XML. На наступному малюнку показано роботу подібних систем. Файл даних перевіряється на відповідність до правил схеми, а потім передається будь-яким придатним способом для перетворення. У цьому випадку перетворення розміщує дані в таблиці на веб-сторінці.

У наступному прикладі представлено перетворення, яке завантажує дані таблиці на веб-сторінці. Суть прикладу не в тому, щоб пояснити, як створювати перетворення, а в тому, щоб показати одну з форм, яку вони можуть набувати.

Name Breed Age Altered Declawed Ліцензія Owner

У цьому прикладі показано, як може виглядати текст одного з типів перетворення, але пам'ятайте, що ви можете обмежитися чітким описом того, що вам потрібно від даних, і цей опис може бути зроблено рідною мовою. Наприклад, ви можете піти у відділ ІТ і сказати, що необхідно надрукувати дані про продаж для конкретних регіонів за останні два роки, і що ці відомості мають виглядати так і так. Після цього фахівці відділу можуть написати (або змінити) перетворення, щоб виконати ваше прохання.

Корпорація Майкрософт та зростаюча кількість інших компаній створюють перетворення для різних завдань, що робить використання XML ще зручнішим. У майбутньому, швидше за все, можна буде завантажити перетворення, що відповідає вашим потребам без додаткового налаштування або з невеликими змінами. Це означає, що з часом використання XML вимагатиме менше і менше витрат.

XML у системі Microsoft Office

Професійні випуски Office забезпечують розширену підтримку XML. Починаючи з 2007 Microsoft Office System, Microsoft Office використовує формати файлів на основі XML, наприклад DOCX, XLSX та PPTX. Так як XML зберігає дані у текстовому форматі, а не у власному двійковому форматі, клієнти можуть визначати власні схеми та використовувати ваші дані різними способами, без необхідності платити роялтієс. Для отримання додаткових відомостей про нові формати див . у статті формати Open XML та розширення імен файлів . Нижче наведено інші переваги.

Все це чудово, але що робити, якщо у вас є дані XML без схеми? Це залежить від того, яку програму Office ви використовуєте. Наприклад, при відкритті XML-файлу без схеми у додатку Excel воно передбачає, що схема існує, і дає можливість завантажити дані в таблицю XML. Ви можете використовувати XML-списки та таблиці для сортування, фільтрації та обчислення даних.

Увімкнення засобів XML до Office

За промовчанням вкладка "Розробник" не відображається. Її необхідно додати на стрічку для використання команд XML у Office.

У попередній статті було описано загальні поняття щодо XML. У цій статті навчимося виконувати основні дії, пов'язані зі зміною, додаванням, пошуком у файлі XML.

XML-файл, який використовується для прикладу.

Mazda 2007 BMW 2009

xml dom

В даний момент, наш файл містить таку структуру:

Взаємини між вузлами в XML DOM, основні моменти:

1. Будь-який вузол у DOM дереві має батька ParentNode. У нашому прикладі garage є батьком для обох елементів car, а обидва елементи car є своєю чергою батьками для елементів: model і year.

Як отримати батька для xml елемента car?

Console.WriteLine(elmRoot["car"].ParentNode.Name); //Результат: garage

2. Батьки можуть мати дітей ChildNodes. Наприклад, для вузла garage дітьми є обидва елементи car. У елементів car теж є діти model і year.

ChildNodes, є колекцією, яка зберігає всі дочірні xml елементи, щоб звернутися до потрібного елемента, потрібно вказати його індекс. (Індекс завжди починається з нуля!)

Наприклад, як отримати перший дочірній елемент?

ElmRoot.ChildNodes;

3. Як і у звичайному житті дитина може народитися першим FirstChild, або останнім LastChild.

Якщо взяти для прикладу елемент car, то

FirstChild - це model LastChild - це year

4. У свою чергу, між дочірніми елементами теж існують зв'язки, вони можуть бути братами або сестрами, якщо проводити паралелі з реальним життям.

У дитини може бути, наприклад, брат Previous Sibling і наступний брат Next Sibling

Console.WriteLine(elmRoot.ChildNodes.FirstChild.NextSibling.Name); //Результат: year Console.WriteLine(elmRoot.ChildNodes. LastChild.PreviousSibling.Name); //Результат: model

Якщо елемент не знайдений, тоді виникає виняток: NullReferenceException, тому під час роботи з xml завжди використовуйте блоки try catch.

Console.WriteLine(elmRoot.ChildNodes. LastChild.NextSibling.Name); Console.WriteLine(elmRoot.ChildNodes. FirstChild.PreviousSibling.Name);

LastChild є NextSibling;
FirstChild є PreviousSibling;

За допомогою вище описаних методів можна легко переміститися до потрібного вузла та отримати будь-яке потрібне вам значення.

Як отримати значення xml елемента?

Значення xml елемента можна отримати за допомогою властивості InnerText, наприклад:

Console.WriteLine(elmRoot["car"].FirstChild.InnerText); //Результат: mazda

Ще один спосіб, щоб отримати це значення xml елемента:

Console.WriteLine(elmRoot.FirstChild.FirstChild.InnerText); //Результат: mazda

Послідовність переміщень по DOM дереву:

Garage -> car -> model -> Мазда

Отримуємо рік:

ElmRoot["car"].LastChild.InnerText; //Результат: 2007

Послідовність:

Garage -> car -> year -> 2007

Ще приклад: 3 способи, для отримання одного й того самого результату.

Console.WriteLine(elmRoot.LastChild.FirstChild.InnerText); Console.WriteLine(elmRoot["car"].NextSibling.FirstChild.InnerText); Console.WriteLine(elmRoot.ChildNodes.Item(1).FirstChild.InnerText); //Результат: BMW

Якщо потрібно отримати рік для елемента зі значенням Mazda:

Console.WriteLine(elmRoot.FirstChild.LastChild.InnerText); //Результат: 2007

Для BMW (два способи, отримати один і той же результат)

Console.WriteLine(elmRoot.ChildNodes.Item(1). ChildNodes.Item(1).InnerText); Console.WriteLine(elmRoot.ChildNodes.ChildNodes.InnerText); //Результат: 2009

Як змінити значення xml елемента?

За допомогою властивості InnerText()можна як отримати, так і змінити значення xml елемента, наприклад змінимо рік.

//Встановлюємо нове значення elmRoot.FirstChild.LastChild.InnerText = "2010"; //Виводимо нове значення на екран консолі Console.WriteLine(elmRoot.FirstChild.ChildNodes.Item(1).InnerText); //Результат: 2010

При цьому потрібно пам'ятати, що всі зміни відбуваються з віртуальним XML файлом, якщо Ви відкриєте фізичний файл, то побачите, що, як і раніше, в ньому зазначений рік 2007.

Для того, щоб зміни набули чинності, потрібно скористатися методом Save, наприклад:

ElmRoot.Save("ім'я xml файлу або потік");

Тепер інформація буде змінена у "фізичному" xml файлі.

Як отримати кількість дочірніх елементів?

Console.WriteLine(elmRoot.FirstChild.ChildNodes.Count);

garage -> car містить 2 дитини: model та year

Console.WriteLine(elmRoot.FirstChild.FirstChild.ChildNodes.Count);

garage -> car -> model містить 1 дочірній xml елемент.

Звернення до дочірніх елементів

за індексом

ElmRoot.ChildNodes.Name; elmRoot.ChildNodes.Name; //Результат: car

За допомогою циклу

Foreach (XmlNode nod in elmRoot.ChildNodes) ( Console.WriteLine(nod.Name); ) //Результат: car, car

Як отримати ім'я xml елемента?

elmRoot.Name; //Результат: garage

Створення нового елемента XML

Створимо новий елемент у нашому XML документі, щоб він відрізнявся від двох інших (car) назвемо його автобус (bus).

При створенні нового елемента скористаємося рекомендацією із сайту msdn і замість стандартного new XmlElement скористаємося методом CreateElement.

XmlElement elm = xmlDoc.CreateElement("bus");

Створення та додавання нового xml елемента

Створимо новий xml елемент під назвою «BUS».

XmlElement elmRoot = xmlDoc.DocumentElement; Console.WriteLine(elmRoot.ChildNodes.Count); //car, car XmlElement elmNew = xmlDoc.CreateElement("bus"); elmRoot.AppendChild(elmNew); Console.WriteLine(elmRoot.ChildNodes.Count); //3 car, car, bus xmlDoc.Save("ім'я xml файлу");

Пояснення:

1. Спочатку отримуємо root-елемент до якого будемо кріпити нові елементи.

2. Як перевірку виведемо поточну кількість дочірніх елементів у елементу garage: 2 (car і car)

3. Створюємо новий елемент BUS

4. За допомогою методу AppendChildдодаємо новий елемент у дерево

5. Знову скористаємося перевіркою та виведемо поточну кількість елементів у елементу garage, тепер їх стало 3: car, car, bus.

6. Щоб зміни торкнулися фізичного файлу, зберігаємося

У самому XML файлі новий елемент виглядатиме так:

Як додати новий xml елемент?

Завдання: створити новий XML елемент і додати до нього якийсь текстовий вміст, наприклад рік випуску.

String strFilename = @ "C:\lessons\Auto.xml"; XmlDocument xmlDoc = новий XmlDocument(); xmlDoc.Load(strFilename); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmNew = xmlDoc.CreateElement("bus"); XmlText new_txt = xmlDoc.CreateTextNode("2006"); elmRoot.AppendChild(elmNew); elmRoot.LastChild.AppendChild(new_txt); Console.WriteLine(elmRoot.ChildNodes.Name); //bus Console.WriteLine(elmRoot.ChildNodes.LastChild.InnerText); //2006 Console.Read();

У XML файлі:

2006

Для наочності

А тепер створимо вузол «bus», з такою ж архітектурою, як і car, тобто додамо вузли: model, year та якийсь текстовий вміст.

Створення XML-елемента з дочірніми елементами

string strFilename = @ "C:\lessons\Auto.xml"; //Створюємо новий xml документ у пам'яті XmlDocument xmlDoc = new XmlDocument(); //завантажуємо xml файл на згадку xmlDoc.Load(strFilename); //Отримуємо root-елемент XmlElement elmRoot = xmlDoc.DocumentElement; //Створюємо 3 елементи: bus, model, year XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("year"); //Встановлюємо значення для елементів: model, year XmlText year_txt = xmlDoc.CreateTextNode("2006"); //XmlText mod_txt = xmlDoc.CreateTextNode("liaz"); додамо інакше //До елемента bus додаємо два дочірні елементи: model і year elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); //Додаємо значення вузлам model і year elmModel.InnerText = "liaz"; elmYear.AppendChild(year_txt); //Додаємо в дерево новий xml елемент bus elmRoot.AppendChild(elmBUS); //Перевіряємо, чи все додано, як треба Console.WriteLine(elmRoot.ChildNodes.FirstChild.InnerText); Console.WriteLine(elmRoot.LastChild.LastChild.InnerText); //Якщо все гаразд, то використовуємо метод Save xmlDoc.Save("ім'я xml файлу");

Результат:

liaz 2006

Як можна скоротити цей код? Наприклад, так:

String PathXmlFile = @ "C:\lessons\Auto.xml"; XmlDocument xmlDoc = новий XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("year"); //Додаємо значення вузлам model і year elmModel.InnerText = "liaz"; elmYear.InnerText = "2006"; elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); elmRoot.AppendChild(elmBUS); / / Якщо все правильно, то викликаємо метод Save xmlDoc.Save ("ім'я xml файлу");

Ще трохи скоротимо код, для цього скористаємось властивістю InnerXml:

XmlDocument xmlDoc = новий XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmXML = xmlDoc.CreateElement("bus"); string txt = " liaz" + "2006/ / InnerXml! elmXML);xmlDoc.Save(PathXmlFile);

Результат

Отримати список елементів за допомогою GetElementByTagName

GetElementByTagName повертає XmlNodeList, в якому містяться всі елементи нащадки, що належать указному елементу, наприклад, нам потрібно отримати всі моделі машин, що зберігаються в гаражі:

XmlDocument xmlDoc = новий XmlDocument(); xmlDoc.Load(strFilename); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); foreach (XmlNode node in modelName) ( Console.WriteLine(node.InnerText); ) //Результат: mazda, bmw, liaz

Звернення за допомогою індексу:

String PathXmlFile = @ "C:\lessons\Auto.xml"; XmlDocument xmlDoc = новий XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); Console.WriteLine(modelName.InnerText); //Результат: liaz

Як змінити текстовий вміст, щойно створений елемент «bus», за допомогою методу GetElementByTagName?

String PathXmlFile = @ "C:\lessons\Auto.xml"; XmlDocument xmlDoc = новий XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); Console.WriteLine(modelName.InnerText); //Отримали значення: liaz

Або можна змінити ім'я liaz на Ikarus

Console.WriteLine(modelName.InnerText = "Ikarus");

Вже досить багато часу минуло з того часу, як я пообіцяв розповісти про роботу з даними у форматі XML при розробці.NET-додатків. Обіцянки треба виконувати. Прошу лише врахувати, що ця стаття орієнтована не на професійних .NET-розробників, а на тих, хто ще не має суттєвого досвіду створення .NET-додатків.


Навіщо нам працювати з XML?

Якщо ви ще не дуже добре уявляєте собі, що таке XML, то рекомендую прочитати статтю "XML - це всерйоз і надовго" у "КВ" № за 2007 рік. Щоб заощадити місце для найважливіших речей, тут сам формат XML не розбиратиметься.

Перед тим, як починати знайомитися з програмним кодом, потрібно відповісти на одне важливе питання: навіщо взагалі включати підтримку XML у свою програму? Думаю, що багато хто ставив собі це питання щодо багатьох технологій, і не всі після відповіді були включені до додатків. Втім, з XML справа трохи інакша, і існують реальні приводи використовувати цей формат у багатьох ситуаціях.

Головна перевага XML в тому, що, будучи за природою текстовим форматом, він прекрасно дозволяє зберігати і передавати будь-які дані. Оскільки цей текстовий формат, то сама собою вирішується проблема його крос-платформенності, і так само легко вирішується проблема передачі XML-даних (як це, наприклад, зроблено в SOAP). Крім того, можна без проблем змінювати формат передачі або зберігання даних, додаючи нові атрибути і не турбуючись про сумісність з попередніми версіями формату, оскільки програми, що використовують стару версію, зможуть прочитати те, що їм потрібно, не звертаючи уваги на нові теги або атрибути . Багато програм використовують базовані на XML файлові формати, багато протоколів передачі також засновані на XML, і списки тих і інших продовжують зростати.

Звичайно, з іншого боку, XML не дуже економічний, тому що, як колись вірно помітив один із відвідувачів форуму "Комп'ютерних вістей", часто XML-документи складаються на 10% даних і на 90% тегів. Втім, це вже значною мірою залежить від того, які ви самі оберете теги. Можна написати вул. Мельникайте, 2, а можна . Хоча, якщо чесно, мені здається, що з нинішніми вінчестерами та товстими каналами немає сенсу особливо стискатися.

Так що в умілих руках XML – річ потужна та зручна, а через повсюдну поширеність цього формату від нього і зовсім нікуди не дінешся. Тому перейдемо вже до написання програмного коду.

Для програмування ми використовуватимемо основну мову платформи.NET - C#. Для того, щоб якомога більше читачів могли самі повправлятися з наведеним програмним кодом, я використовуватиму першу версію C# і .NET Framework.


Запис даних

Спочатку поговоримо про запис даних, оскільки самі розумієте, щоб щось звідкись зчитувати, потрібно спочатку щось кудись і записати. А якщо ми з вами зайнялися програмуванням, то створювати XML-дані "ручками" нам з вами не личить. Тому давайте спочатку займемося записом даних у XML.

Для початку створіть новий проект у Visual Studio, #Develop'е або C# Builder'е, і до списку імпортованих namespace'ів додайте System.Xml.

За запис XML-даних у .NET Framework"е відповідає спеціальний клас XmlTextWriter, який дозволяє записувати XML-дані в довільний потік. Тобто, ми, взагалі кажучи, можемо записати їх з його допомогою і у файл, і в базу даних, і відправити комусь через Інтернет, проте зараз ми будемо писати все саме у файл.. Ви можете перенаправити висновок, змінивши конструктор об'єкта (тобто, передавши при ініціалізації не ім'я файлу та його кодування, а об'єкт, що є потоком даних). я, здається, вже почав забігати трохи вперед, спочатку познайомимося з кодом, відповідальним за запис даних у наш з вами XML-файл.

String FileName = "c:\demo.xml"; XmlTextWriter xml = новий XmlTextWriter(FileName, System.Text.Encoding.Unicode); xml.Formatting = Formatting.Indented; xml.WriteStartDocument(); xml.WriteStartElement("rootelement"); for (int i = 0; i< 10; i++) { xml.WriteStartElement("subelement"); xml.WriteAttributeString("attrib1", "value1"); xml.WriteAttributeString("attrib2", i.ToString()); for (int j = 0; j < 10; j++){ xml.WriteStartElement("subsubelement"); xml.WriteAttributeString("attr", j.ToString()); xml.WriteEndElement(); } xml.WriteEndElement(); } xml.WriteEndElement(); xml.WriteEndDocument(); xml.Close();

Перший рядок, гадаю, цілком зрозумілий - це просто запис імені файлу, в який ми зберігатимемо дані. Далі ми створюємо об'єкт типу XmlTextWriter (він називається, як бачите, xml), і саме з ним ми будемо робити всі подальші операції. Зауважте, що при конструюванні об'єкта ми вказуємо і кодування, в якому записуватиметься XML: у прикладі це Unicode. Наступний рядок, взагалі кажучи, не є обов'язковим, проте він зробить наш XML-документ, що називається, human readable, тобто додасть потрібні відступи і розіб'є його на рядки. Без цього весь документ був би записаний одним рядком, що хоч і економить місце, але робить його практично непридатним для ручного редагування.

Починається запис документа з виклику WriteStartDocument() нашого об'єкта xml. Наступний за нею рядок додає кореневий елемент "rootelement" у наш XML-документ (нагадаю, для XML-документів кореневий елемент повинен бути присутнім у єдиному екземплярі). Далі ми в циклі додаємо ще десять елементів, що не несуть ніякого смислового навантаження, в наш з вами XML-документ, для кожного з яких встановлюємо два атрибути і ще по десять поделементів. Зверніть увагу, що ми можемо додавати до рядка число без явної конвертації даних, а от якщо число має повністю утворювати рядок, то його потрібно явно перетворювати методом ToString(). Також зверніть увагу, що ми повинні явно закривати кожен із елементів нашого XML-документа, а також потім і весь документ.

Тепер, коли наш XML-документ успішно записаний, давайте подивимося, як можна вважати з нього дані.


Читання даних

Додайте на форму вашої програми (якщо, звичайно, вона у вас не консольна) компонент listBox для того, щоб можна було стежити за результатом читання XML-файлу. Ну а якщо ваша програма консольна, то ви з легкістю зможете перенаправити виведення на консоль.

Як завжди, спочатку ознайомимося з кодом програми, а потім уже дивитимемося, що саме цей код робить.

XmlTextReader xml = новий XmlTextReader(FileName); xml.WhitespaceHandling = WhitespaceHandling.None; int i = 0; while (xml.Read())( if ((xml.NodeType == XmlNodeType.Element) & (xml.Name == "subelement")) ( listBox1.Items.Add("subelement " + i + " found") i++; listBox1.Items.Add(" " + xml.GetAttribute("attrib1")); listBox1.Items.Add(" " + xml.GetAttribute("attrib2")); while (xml.Read()&( xml.Name == "subsubelement"))( listBox1.Items.Add(" " + xml.GetAttribute("attr")); ) ) ) xml.Close();

Для читання, як ви могли помітити, ми використовуємо інший клас, а саме - XmlTextReader. Він у тому самому просторі імен, як і клас, який ми використовували для запису даних. У першому рядку ми створюємо екземпляр XmlTextReader"а, що має ім'я xml (тут ми припускаємо, що змінна FileName вже визначена нами раніше). Щоб пропускати порожні рядки, якщо такі якимось незбагненним чином виникнуть у нашому щойно створеному XML-файлі, ми використовуємо наступну рядок у наведеному фрагменті коду: Змінна i використовується для підрахунку кількості знайдених елементів "subelement" у XML-файлі, з якого здійснюється зчитування даних.

Далі йде цикл безпосереднього читання даних із файлу. Метод Read() зчитує наступний елемент документа XML, і після його зчитування ми перевіряємо, що саме ми вважали. Якщо це дійсно елемент "subelement", то ми додаємо інформацію про зчитаний елемент listList1, інкрементуємо змінну, що містить кількість зчитуваних елементів, а потім зчитуємо атрибути елемента. Після читання атрибутів ми організуємо окремий цикл для читання поделементів subublement (зверніть увагу, що для цього нам не потрібно окремого XmlTextReader) і атрибутів цих поделементів.

При читанні XML-файлів, так само, як і при їх запису, при конструюванні XmlTextReader"а можна вказати в якості параметра потік, з якого буде читатися, і тоді читати можна буде не тільки з файлів, але також і з інших джерел Слід зазначити одну корисну особливість класу XmlTextReader: при читанні він не завантажує в пам'ять весь XML-документ, що читається, тому з його допомогою зручно проводити розбір великих XML-документів (наприклад, XML баз даних).


За кадром

Загалом приклад, який ми з вами щойно розібрали, надто простий для реальних проектів. В наш час при читанні XML-документів зазвичай застосовується їх валідація за допомогою DTD, XML Schema або Relax NG. Валідація – це перевірка відповідності розмітки XML-документа деякому стандарту, що описується у зовнішньому файлі. Валідація потрібна для того, щоб перевірка документа не була жорстко зашита в алгоритм програми, а могла змінюватися довільним чином при зміні у форматі даних без оновлення програмного коду, що зчитує або записує дані. На жаль, зараз ми з вами вже розібрати валідацію не встигнемо, оскільки, як ви розумієте, обсяг газетної статті має певні обмеження.

Ще один цікавий і корисний практичний момент, що стосується роботи з даними XML, - це XSL-перетворення даних. Це перетворення застосовується до даних при їх відображенні на HTML-сторінках і фактично просто є застосуванням певного шаблону web-сторінки до XML-файлу з будь-якими даними. Оскільки левова частка теперішнього використання XML-даних так чи інакше припадає на World Wide Web, то і XSL-перетворення розглянути було б дуже непогано.

Так що, думаю, ця стаття матиме продовження - але, звичайно, тільки в тому випадку, якщо ви самі (тобто читачі "Комп'ютерних вістей") про це попросите на форумі або в листі на мою електронну поштову адресу. Поки що про використання XML в .NET-додатках, мабуть, все. Сподіваюся, що ця інформація буде корисною для вас.