Xml tutorial

XML - Розширюваний Мова Розмітки (eX tensible M arkup L anguage) рекомендований W3C як мову для обміну інформацією між різними системами. Це орієнтований на текст спосіб збереження інформації. Сучасні мови обміну даними, такі як XHTML, так само як і більшість технологій WebServices, засновані на XML.

DOM XML (Об'єктна модель документів) - це ряд стандартизованих об'єктів, які надають однотипний інтерфейс для використання XML в різних мовах і платформах. Стандарт визначає тільки методи, властивості і інші частини інтерфейсу об'єкта, залишаючи реалізацію вільної для різних мов. FCL в даний час підтримує повністю DOM 1.0.

У статті наведено приклади роботи з XML-даними за принципом наростаючої складності.

Використання: Юнікод або Ansi

FPC надає XML модулі, що використовують кодування ANSI. Тому, вони можуть відрізнятися в залежності від платформи, в якій виконується код і не мати підтримку Юнікоду. Lazarus, в свою чергу, надає власний набір XML модулів, розташованих в пакеті LazUtils. Вони повністю підтримують Юнікод в форматі UTF-8 і не залежать від виконує код платформи. Ці модулі взаємозамінні і їх використання визначається лише наявністю в списку uses.

Наступні модулі FPC XML використовують системну кодування:

Ці модулі надані Lazarus XML і мають підтримку Юнікоду в форматі UTF-8:

  • laz2_DOM
  • laz2_XMLRead
  • laz2_XMLWrite
  • laz2_XMLCfg
  • laz2_XMLUtils
  • laz_XMLStreaming.

Не всі з них потрібні в кожному прикладі. Однак, вам знадобиться DOM, тому що в ньому міститься кілька типів, включаючи TXMLDocument.

Читання текстового вузла

Пам'ятайте, що коли Ви працюєте з TXMLDocument, текст в межах вузла вважається окремим текстовим вузлом. Таким чином, Ви повинні звернутися до текстового значенням вузла, як до окремого вузла. Альтернативно, властивість TextContent може бути використано для повернення значення всіх вузлів лежать нижче, які пов'язані з даними.

Процедура ReadXMLFile завжди створює новий TXMLDocument. таким чином Ви не повинні створювати його заздалегідь. Однак Ви повинні викликати метод Free вручну після закінчення роботи з документом для звільнення ресурсів зайнятих об'єктом TXMLDocument.

Для прикладу розглянемо наступний XML-файл:

Наступний приклад показує коректний і некоректний способи отримання значень текстового вузла xml:

Висновок назв вузлів

Маленьке зауваження про навігацію по дереву DOM:

Для послідовного доступу до вузлів найкраще використовувати властивості FirstChild і NextSibling (щоб крокувати вперед по дереву) або LastChild і PreviousSibling (тому з кінця дерева). Для довільного доступу до вузлів дерева можна користуватися властивістю ChildNodes або методом GetElementsByTagName. але ці методи створюють об'єкт TDOMNodeList, який після використання повинен бути звільнений. Це поведінка відрізняється від інших реалізацій DOM (наприклад, MSXML), оскільки FCL реалізація заснована на об'єктах, а не на інтерфейсах.

Наступний приклад демонструє, як виводити імена вузлів в компонент TMemo, розташований на формі.

Нижче наведено XML-файл з ім'ям 'C: \ Programs \ test.xml':

І код на Pascal, який виконує цю задачу:

В результаті програма виведе наступне:

Завантаження XML в TreeView

Одне з звичайних використань файлу XML - розбір і показ інформації в деревовидному форматі. Ви можете відшукати компонент TTreeView на вкладці "Common Controls" Lazarus'а.

Функція, наведена нижче, візметься документ XML, попередньо завантажений з файлу або згенерований програмно, і заповнить TreeView його вмістом. Заголовком кожного вузла буде вміст першого атрибута цього вузла.

Зміна XML документа

Перша річ, про яку слід пам'ятати, TDOMDocument це хендл (handle) до DOM. Ви можете отримати екземпляр цього класу створюючи або завантажуючи XML документ.

З іншого боку, вузли не можуть бути створені як звичайні об'єкти. Ви повинні використовувати методи, які надає TDOMDocument для їх створення і, згодом, використовувати інші методи для розміщення їх в потрібне місце дерева. Це говорить про те, що вузли повинні належати цілком певного документу DOM.

Ось деякі загальнопоширені методи TDOMDocument:

Створення TXMLDocument з рядка

Якщо дані XML знаходяться в рядку MyXmlString, створити з неї DOM можна за допомогою наступного коду:

Перевірка достовірності документа

Це приклад XML-документа, що містить DTD:

Цей DTD визначає, що елемент root повинен містити один або більше елемент child. а елементи child можуть містити тільки символьні дані. Якщо парсер виявить порушення цих правил, то він повідомить про них.

Завантаження такого документа дещо складніше. Нехай вихідні XML дані містяться в потоці AStream:

пробільні символи

Якщо необхідно зберігати пробільні символи в тексті вузлів, слід користуватися вищенаведеним методом завантаження XML документа. За замовчуванням початкові пробільні символи ігноруються, саме тому функція ReadXML (.) Пропускає все пробільні символи на початку тексту вузлів. Перед викликом Parser.Parse (Src, TheDoc) додайте наступний рядок:

Після цього парсер буде залишати все пробільні символи, включаючи всі переклади рядків, додані для підвищення читаності XML документа!

потокове читання

Обробка XML з використанням DOM, вимагає завантаження всього документа в пам'ять. Це може бути не бажано або неможливо, якщо документ величезний. FCL надає функції для читання одного вузла даних XML за один раз, використовуючи клас TXMLReader і його нащадків. Клас TXMLReader схожий на клас XmlReader платформи .NET. Нижче наведено простий приклад використання TXmlReader:

Генерація файлу XML

Нижче наведено код для запису XML у файлі. (Взято з навчальної програми в блозі DeveLazarus). Будь ласка пам'ятайте, що модулі DOM і XMLWrite повинні бути включені в Uses

Схожі статті