XML Data2type GmbH простий за допомогою XML Simple

(Уривок із "Perl & XML" Еріка Т. Рей та Джейсона Макінтоша)

data2type

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

Ми відкриємо вам секрет: написання програм для обробки XML не так вже й складно. Цілий корпус, повний інструментів, готовий подбати про незліченні дратівливі деталі парсера та створення структури даних за допомогою простих API, які можна зрозуміти за лічені хвилини. Якщо вам дійсно потрібна складність програми XML та всі обробки, тоді ви можете мати її, але не обов’язково. Робота з XML може бути настільки простою, наскільки глибокою, залежно від програми. Існують також прості інструменти для простих завдань.

Щоб продемонструвати це, давайте розглянемо дуже простий модуль під назвою XML: Simple від Гранта Макліна. За мінімальне навчання ви можете досягти напрочуд великих успіхів у обробці XML.

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

Давайте спробуємо. Як і в кожному модулі, ми спочатку повинні завантажити XML: Simple в нашу програму за допомогою use:

За допомогою виклику XML: Simple визначив для нас наступні дві функції:

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

Отримує посилання на хеш із закодованим документом і перетворює його у правильну розмітку XML. Результатом функції є текстовий рядок із перетвореним XML-документом.

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

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

Ми приймаємо виклик і спочатку розглядаємо файл XML, щоб зрозуміти його структуру. У наступному прикладі ми бачимо такий список розсилки.

Приклад: XML-документ зі списком розсилки SpamChucker

Після швидкого перегляду документації XML: Simple (perldoc XML: Simple) ми відчуваємо можливість написати сценарій, показаний у прикладі нижче:

Приклад: Скрипт для перетворення імен клієнтів у великі літери

Якщо ми запустимо цю програму (трохи необдумано, оскільки вихід даних фактично відповідає наш бос), ми отримаємо такий результат:

Вітаємо! Ви написали свою першу програму для обробки даних XML, і вона чудово справляється. Ну, майже відмінно. Результат трохи відрізняється від очікуваного. З одного боку, порядок елементів змінюється, оскільки хеш-масиви не отримують порядок вставлених ключів. Крім того, відступи між кожним елементом можуть бути втрачені. Чи може це бути проблемою?

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

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

Подумайте про себе як про людину, яка вміє обробляти XML та Perl!

Звичайно, ми лише на початку нашої подорожі. Більша частина книги лежить перед нами, повна порад та прийомів, які допоможуть вам із XML. Не всі завдання, пов'язані з XML, настільки прості, як щойно показані. Але нічого не є настільки складним або складним, що Hammer Perl було б недостатньо, щоб підробити із ним залізний XML.