XML за разработчици на Perl, част 2
Преглед на синтактичния анализ на дърво и управляван от събития анализ

Серия съдържание:
Това съдържание е част от # статии от поредица: XML за разработчици на Perl
Това съдържание е част от поредицата: XML за разработчици на Perl
Следете за още статии от тази поредица.
За много голям брой приложения на Perl XML: Simple, който беше разгледан в Част 1 на тази серия статии (вж. Ресурси), е достатъчен като инструмент за работа с XML. XML: Simple може да конвертира входящите XML файлове в лесно обработваеми структури от данни на Perl и да конвертира тези структури от данни обратно в XML. Трябва обаче да запомните, че този метод не винаги работи.
XML: Simple не е най-доброто решение, когато трябва да създадете представяне в памет на XML документ и след това да го търсите или трансформирате по сложни и непредсказуеми начини. В такива ситуации се използва разбор на дървета. Ако XML документът не се побира в паметта или е поток с неизвестна дължина, не можете да използвате и XML: Simple. В този случай трябва да използвате парсер, управляван от събития. Първоначално парсерите, управлявани от събития, може да изглеждат малко странни, но след като започнете да използвате този тип синтактичен анализ, SAX може да се превърне във вашия любим инструмент.
Начало на работата
За да продължите в тази статия, ще ви трябват няколко Perl модула с отворен код. Можете да ги получите по един от двата начина: ако имате Windows, използвайте ppm; ако UNIX® или Linux ™ се позовават на CPAN (вижте Ресурси). Ако не сте запознати с тези архиви, прочетете за тях в Част 1 на тази серия статии.
Листинг 1 показва как можете да управлявате модули на UNIX/Linux. По-добре е да стартирате като root, така че модулите да са достъпни за всички потребители в системата. Тези модули имат зависимости, някои от които може да не присъстват във вашата система. Ако cpan е конфигуриран правилно (следвайте = да), зависимостите ще бъдат инсталирани автоматично.
Листинг 1. Извличане на модулите, използвани в тази статия, с помощта на CPAN
Както можете да видите в Листинг 2, това е още по-лесно за Windows. Отново, по-добре е да инсталирате всичко с администраторски права.
Листинг 2. Получаване на PPM
Разбор на дърво
За много програмисти може да бъде много удобно да показват XML в дървовидна структура. Това XML представяне е формализирано като обектен модел на документ (DOM) и се използва от много години; DOM Level 3 е издаден през 2002 г.
DOM представлява XML документ като дърво от двупосочни възли, като първото дете на всяко ниво се присъединява към своя родител и успоредно с това братя и сестри. Дървото дефинира голям набор от функции, внедрени във всички основни езици за програмиране.
За връзки към спецификацията на DOM и към по-подробни въведения към спецификацията на DOM, XPath и свързаните протоколи, вижте Ресурси.
Много модули на Perl могат да анализират XML документи в DOM дървета. Един от най-добрите е XML: LibXML на Петр Паяс (вж. Ресурси). Той обгръща libxml2 на проекта Gnome, богат на функции пакет, който включва DOM парсер, частично внедряване на XPath и изпълнение на SAX2 (описано по-долу).
Листинг 3 показва файла, с който сте работили в Част 1 (вижте Ресурси), където сте го анализирали с XML: Simple, промените представянето на Perl структура на данни и след това използвате XML: Simple, за да го преобразувате обратно в XML в текстова форма.
Листинг 3. Зоомагазин на Роузи, pets.xml
Този файл е много лесен за анализиране с XML: LibXML (вижте Листинг 4 и изхода на програмата в Листинг 5). Проста команда $ parser-> parse_file създава XML дървесна структура за DOM. Определяме проста рутина Perl за добавяне на поделемент към възел в дърво и след това използваме това, за да създадем поддърво, представляващо едно животно. След това добавяме няколко нови животни към нашия асортимент, използвайки подпрограмата addPet (): гербил и хамстер.
Листинг 4. Анализиране на асортимента от магазини на Rosie с помощта на XML: LibXML
За да покажем нашата способност в DOM, след това получаваме списък с връзки към ценови възли в дървото и увеличаваме всяка цена с 20%. Тъй като текстът (цената) в даден елемент може да бъде представен от повече от един текстов възел, най-лесният начин да направите това е да извлечете цената от възела, да го увеличите и преформатирате и след това напълно да замените началния възел, вместо да променяте то на място. Това, разбира се, е много по-сложно от същата трансформация в кода на Perl в първата част.
Листинг 5. Подредено извеждане на парсер на дърво
Това е традиционният подход, при който работите с XML, използвайки стандартен парсер на дърво. Оригиналната версия като текст в XML формат се преобразува в DOM дърво. За да навигирате в дървото и да обхождате възли, можете да следвате връзки от един възел към друг или да използвате команди като XPath, за да получите набори от връзки към възли. Допълнителни възли могат да бъдат редактирани с помощта на тези връзки. След това можете да запишете дървото обратно на диск или просто да отпечатате.