/XML-Parser

A program which parses an xml file

Primary LanguageC++

XML-Parser

Вашата програма трябва да позволява на потребителя да отваря файлове (open), да извършва върху тях някакви операции, след което да записва промените обратно в същия файл (save) или в друг, който потребителят посочи (save as). Трябва да има и опция за затваряне на файла, без записване на промените (close). За целта, когато програмата ви се стартира, тя трябва да позволява на потребителя да въвежда команди и след това да ги изпълнява.

Когато отворите даден файл, неговото съдържание трябва да се зареди в паметта, след което файлът се затваря. Всички промени, които потребителят направи след това трябва да се пазят в паметта, но не трябва да се записват обратно, освен ако потребителят изрично не yкаже това.

Във всеки от проектите има посочен конкретен файлов формат, с който приложението ви трябва да работи. Това означава, че: то трябва да може да чете произволен валиден файл от въпросния формат; когато записва данните, то трябва да създава валидни файлове във въпросния формат.

Както казахме по-горе, потребителят трябва да може да въвежда команди, чрез които да посочва какво трябва да се направи. Командите могат да имат нула, един или повече параметри, които се изреждат един след друг, разделени с интервали.

Освен ако не е казано друго, всяка от командите извежда съобщение, от което да е ясно дали е успяла и какво е било направено.

Дадените по-долу команди трябва да се поддържат от всеки от проектите. Под всяка от тях е даден пример за нейната работа: Open Зарежда съдържанието на даден файл. Ако такъв не съществува се създава нов с празно съдържание.

Всички останали команди могат да се изпълняват само ако има успешно зареден файл.

След като файлът бъде отворен и се прочете, той се затваря и приложението ви вече не трябва да работи с негo, освен ако потребителят не поиска да запише обратно направените промени (вижте командата save по-долу), в който случай файлът трябва да се отвори наново. За целта трябва да изберете подходящо представяне на информацията от файла.

Ако при зареждането на данните, приложението ви открие грешка, то трябва да изведе подходящо съобщение за грешка и да прекрати своето изпълнение.

open C:\Temp\file.xml Successfully opened file.xml Close Затваря текущо отворения документ. Затварянето изчиства текущо заредената информация и след това програмата не може да изпълнява други команди, освен отваряне на файл (Open).

close Successfully closed file.xml Save Записва направените промени обратно в същия файл, от който са били прочетени данните.

save Successfully saved file.xml Save As Записва направените промени във файл, като позволява на потребителя да укаже неговия път.

saveas "C:\Temp\another file.xml" Successfully saved another file.xml Help Извежда кратка информация за поддържаните от програмата команди.

help The following commands are supported: open opens close closes currently opened file save saves the currently open file saveas saves the currently open file in help prints this information exit exists the program Exit Излиза от програмата

exit Exiting the program...

Проект 3: XML Parser

Да се напише програма, реализираща четене и операции с XML файлове. Характеристиките на XML елементите, поддържани от програмата, да се ограничат до:

идентификатор на елемента списък от атрибути и стойности списък от вложени елементи или текст

Да се поддържат уникални идентификатори на всички елементи по следния начин:

Ако елементът има поле “id” във входния файл и стойността му е уникална за всички елементи от файла, да се ползва тази стойност. Ако елементът има поле “id” във входния файл, но стойността му не е уникална за всички елементи от файла, да се ползва тази стойност, но към нея да се конкатенира някакъв низ, който да допълни идентификатора до уникален низ. (например, ако два елемента имат поле id=”1”, то единият да получи id=”1_1”, а другият - id=”1_2”) Ако елементът няма поле “id” във входния файл, да му се присъедини уникален идентификатор, генериран от програмата.

След като приложението отвори даден файл, то трябва да може да извършва посочените по-долу операции, в допълнение на общите операции (open, close, save, save as, help и exit):

print Извежда на екрана прочетената информация от XML файла (в рамките на посочените по-горе ограничения за поддържаната информация). Печатането да е XML коректно и да е “красиво”, т.е. да е форматирано визуално по подходящ начин (например, подчинените елементи да са по-навътре) select Извежда стойност на атрибут по даден идентификатор на елемента и ключ на атрибута set Присвояване на стойност на атрибут
children Списък с атрибути на вложените елементи child Достъп до n-тия наследник на елемент text Достъп до текста на елемент delete Изтриване на атрибут на елемент по ключ newchild Добавяне на НОВ наследник на елемент. Новият елемент няма никакви атрибути, освен идентификатор xpath операции за изпълнение на прости XPath 2.0 заявки към даден елемент, която връща списък от XML елементи

Минимални изисквания за поддържаните XPath заявки

Примерите по-долу са върху следния прост XML низ:

John Smith USA Ivan Petrov Bulgaria

да поддържат оператора / (например “person/address” дава списък с всички адреси във файла) да поддържат оператора [] (например “person/address[0]” два адресът на първия елемент във файла) да поддържат оператора @ (например “person(@id)” дава списък с id на всички елементи във файла) Оператори за сравнение = (например “person(address=”USA”)/name” дава списък с имената на всички елементи, чиито адреси са “USA”)

Забележка: За проекта не е позволено използването на готови библиотеки за работа с XML. Целта на проекта е да се упражни работата със структурирани текстови файлове, а не толкова със самия XML. Внимание: Не се изисква осигуряване на всички условия в XML и XPath спецификациите! Достатъчно е файловете да “приличат на XML” (както файла в горния пример, който не е валиден XML), а завките да “приличат” на XPath.

Бонуси: да се реализират XML namespaces да се реализират различните XPath оси (ancestor, child, parent, descendant,...)