diff --git a/xml/mephi.dtd b/xml/mephi.dtd new file mode 100644 index 0000000..af7b084 --- /dev/null +++ b/xml/mephi.dtd @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/xml/mephi.xml b/xml/mephi.xml new file mode 100644 index 0000000..ffcb403 --- /dev/null +++ b/xml/mephi.xml @@ -0,0 +1,41 @@ + + + + + + Артемьев Дмитрий + Анисимова Наталья + Бубенко Кирилл + Джелоухова Алена + Заманов Айнур + Михеев Денис + Пивоваров Александр + Самсонов Артем + Соловьева Аня + Суханова Любовь + Тармазаков Евгений + Титоренко Алексей + Штанько Александр + + + Ахметсафин Владислав + Галкин Александр + Головко Ирина + Джумайло Евгений + Ерохин Владимир + Каталкина Виктория + Левин Андрей + Молочков Ярослав + Моряшова Виктория + Полстянкин Константин + Пурик Яна + Разживин Никита + Редюк Сергей + Рябов Петр + Скок Дарья + Стрекалов Олег + Чухненко Александра + + + + diff --git a/xml/parser.py b/xml/parser.py new file mode 100644 index 0000000..1c749f3 --- /dev/null +++ b/xml/parser.py @@ -0,0 +1,57 @@ +#! /usr/bin/env python +#-*- coding: UTF-8 -*- +import sys, libxml2, optparse + +def space(dep): + for i in range(0, dep): + sys.stdout.write(" ") + +depth = 0 +def view(node): + global depth + print + space(depth) + sys.stdout.write(node.name+" ") + if node.properties is not None: + for _property in node.properties: + if _property.type == "attribute": + #print _property.name + sys.stdout.write(_property.content+" ") + child = node.children + depth = depth+1 + while child.next is not None: + if child.type == "element": + view(child) + child = child.next + depth = depth-1 + sys.stdout.write(child.content) + +def open(xml_file): + doc = libxml2.parseFile(xml_file) + root = doc.getRootElement() + #print root.name + #print root.content + view(root) + doc.freeDoc() + +def validate(xml_file, dtd_file): + doc = libxml2.parseFile(xml_file) + dtd = libxml2.parseDTD(None, dtd_file) + ctxt = libxml2.newValidCtxt() + ret = doc.validateDtd(ctxt, dtd) + dtd.freeDtd() + doc.freeDoc() + return ret + +def main(argv): + op = optparse.OptionParser(description = U"Проверка на соответствие DTD", prog="dtd", version="0.1", usage=U"%prog") + op.add_option("-x", "--xml", dest="xml", help=U"XML документ", metavar="XML_FILE") + op.add_option("-d", "--dtd", dest="dtd", help=U"DTD документ", metavar="DTD_FILE") + options, arguments = op.parse_args() + if options.xml and options.dtd: + open(options.xml) + validate(options.xml, options.dtd) + else: op.print_help() + +if __name__ == '__main__': + main(sys.argv) \ No newline at end of file