Data2type GmbH XML е прост с XML Simple

(Откъс от „Perl & XML“ от Ерик Т. Рей и Джейсън Макинтош)

прост

Има хора, които вярват, че XML е изобретение на болен ум, за когото се смята, че има за цел да унищожи човечеството. Понякога можете да разберете. Вградената маркировка с по-малките и по-големите знаци и наклонените черти не е точно облекчение за очите. Ако добавим влагането на елементи, типовете възли и DTD (които бяха толкова приятно прости в сравнение с XML схемата), тогава човек би искал времената на CSV файловете (Стойности, разделени със запетая, редът е запис на данни, Колоните се маркират с фиксиран разделител) и оплакват своя парсер, функцията за разделяне.

Ще ви разкрием една тайна: Писането на програми за обработка на XML не е толкова трудно. Цял случай, пълен с инструменти, е готов да се погрижи за безбройните досадни детайли на парсера и създаването на структура от данни, с прости API, които могат да бъдат разбрани за минути. Ако наистина се нуждаете от сложността на XML приложение с всички изрязвания, тогава можете да го имате, но не е нужно. Работата с XML може да бъде толкова проста, колкото и задълбочена, в зависимост от приложението. Има и прости инструменти за прости задачи.

За да демонстрираме това, нека разгледаме един много прост модул, наречен XML: Simple от Grant McLean. С минимално обучение можете да постигнете изненадващо голям успех при обработката на 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, всичко мина чудесно и шефът беше доволен. Генерираният документ е достатъчно близък до оригинала, за да отговори на изискванията на заявлението.

Човек е склонен да каже, че промените, които сме направили, са a семантично еквивалентен Документ, но това не е напълно вярно. Редът на елементите обикновено е важен в XML. Ние сме щастливи да имаме щедро приложение и също толкова щедър краен потребител в този случай, чиито относително ниски изисквания са изпълнени.

Мислете за себе си като за човек, който може да се справи с XML и Perl!

Разбира се, ние сме едва в началото на нашето пътуване. По-голямата част от книгата е пред нас, пълна със съвети и техники, които ще ви помогнат с XML. Не всички задачи, свързани с XML, са толкова прости, колкото току-що показаната. Но нищо не е толкова сложно или трудно, че Hammer Perl не би бил достатъчен, за да подправи железния XML с него.