>nevim jak napsat to prohledavani. >parser by mel umet podle nejake podminky i vyhledavat ne? >nejak sem to tam nenasel >bo to nejak pres cyklus cely prochazet?
Pouzil som doteraz len standardne moduly: xml.sax a xml.dom. Co sa tyka prechadzania dokumentu je to podla toho ci pouzijes SAX- alebo DOM-parser. Pri SAXe sa nadefinujeje trieda pre handler a pri DOMe sa to da prechadzat v cykle for node in doc.getElementsByTagName(...) Ale najlepsi je konkretny priklad. Majme tento xml-subor so zoznamom knih ------------------------------------------------------- <?xml version="1.0" encoding="windows-1250"?> <catalog> <book isbn="1-56592-724-9"> <title>The Cathedral & the Bazaar</title> <author>Eric S. Raymond</author> </book> <book isbn="1-56592-051-1"> <title>Making TeX Work</title> <author>Norman Walsh</author> </book> <book isbn="80-247-0367-X"> <title>Naučte se Python</title> <author>Mark Lutz & David Ascher</author> </book> <book isbn="63-558-81"> <title>Kompilátory čislicových počítačov</title> <author>David Gries</author> </book> <book isbn="80-05-00153-3"> <title>Algoritmy a štruktúry údajov</title> <author>Niklaus Wirth</author> </book> <book isbn="80-05-00153-3"> <title>Algoritmy a štruktúry údajov</title> <author>Niklaus Wirth</author> </book> <book isbn="80-7226-799-X"> <title>Začínáme programovat v jazyce Python</title> <author>Daryl Harms & Kenneth McDonald</author> </book> <book isbn="80-251-0343-9"> <title>Algoritmy - Datové struktury a programovací techniky</title> <author>Piotr Wróblewski</author> </book> <book isbn="80-86330-05-2"> <title>Python - Podrobná referenční příručka pro programovací jazyk Python</title> <author>David M. Beazley</author> </book> <book isbn="x-y-z"> <title>Průvodce jazykem SCHEME</title> <author>Skoupil, D., Kopka, M.</author> </book> <book isbn="3-89319-744-3"> <title>Einführung in die Automathentheorie, Formale Sprachen und Komplexitätstheorie</title> <author>John E. Hopcroft, Jeffrey D. Ullman</author> </book> <book isbn="80-247-0442-0"> <title>PHP4 - Učebnice základů jazyka</title> <author>Jiří Bráza</author> </book> <book isbn="80-247-0441-2"> <title>PHP4 - Praktické příklady</title> <author>Jiří Bráza</author> </book> </catalog> ------------------------------------------------------- Tu je priklad ako prechadzat tento xml-dokument cez DOM ------------------------------------------------------- import pprint import xml.dom.minidom from xml.dom.minidom import Node doc = xml.dom.minidom.parse("books5.xml") mapping = {} # Vratit vsetky prvky typu "book" # print doc.getElementsByTagName("book") # Pre kazdy prvok "book" for node in doc.getElementsByTagName("book"): #urcit hodnotu atributu "isbn" isbn = node.getAttribute("isbn") # Zoznam dat ku knihe bude tvorit nazov a autor bookdata = [] # vratist vsetky prvky typu "title" L = node.getElementsByTagName("title") # pre kazdy prvok typu "title" for node2 in L: title = "" #print node2.childNodes for node3 in node2.childNodes: if node3.nodeType == Node.TEXT_NODE: title += node3.data bookdata.append(title) # vratist vsetky prvky typu "author" L = node.getElementsByTagName("author") # pre kazdy prvok typu "author" for node2 in L: author = "" #print node2.childNodes for node3 in node2.childNodes: if node3.nodeType == Node.TEXT_NODE: author += node3.data bookdata.append(author) # vytvorit polozku slovniku mapping[isbn] = bookdata keys = mapping.keys() #keys.sort() # vytlacit kluce a polozky slovnika for key in keys: print "%s: %s\n(ISBN %s)\n"\ % (mapping[key][1].ljust(25), mapping[key][0].ljust(30), key) ------------------------------------------------------- a tu je priklad ako sa to da prechadzat cez SAX ------------------------------------------------------- import xml.sax.handler class BookHandler(xml.sax.handler.ContentHandler): def __init__(self): self.inTitle = 0 self.inAuthor = 0 self.mapping = {} def startElement(self, name, attributes): if name == "book": # Zoznam dat ku knihe bude tvorit nazov a autor self.bookdata = [] self.title = "" self.author = "" self.isbn = attributes["isbn"] elif name == "title": self.inTitle = 1 elif name == "author": self.inAuthor = 1 def characters(self, data): if self.inTitle: self.title += data elif self.inAuthor: self.author +=data def endElement(self, name): if name == "title": self.inTitle = 0 self.bookdata.append(self.title) elif name == "author": self.inAuthor = 0 self.bookdata.append(self.author) self.mapping[self.isbn] = self.bookdata # pre kontrolu # print self.mapping import xml.sax import pprint parser = xml.sax.make_parser( ) handler = BookHandler( ) parser.setContentHandler(handler) parser.parse("books5.xml") # pre kontrolu # print handler.mapping # pprint.pprint(handler.mapping) keys = handler.mapping.keys() #keys.sort() # vytlacit kluce a polozky slovnika for key in keys: print "%s: %s\n(ISBN %s)\n"\ % (handler.mapping[key][1].ljust(25), handler.mapping[key][0].ljust(30), key) ------------------------------------------------------- Subory prikladam "Luboš Melichar" <[EMAIL PROTECTED]> Sent by: [EMAIL PROTECTED] 14.06.2007 10:15 Please respond to Konference PyCZ <python@py.cz> To python@py.cz cc Subject [python] XML, amara zdravim.. potrebuju zpracovat XML.. tzn. otevrit soubor, najit urcity tag, vypsat ho a zmenit mu parametr... koukal sem na amara http://uche.ogbuji.net/tech/4suite/etc/amara-manual.html nevim jak napsat to prohledavani. parser by mel umet podle nejake podminky i vyhledavat ne? nejak sem to tam nenasel bo to nejak pres cyklus cely prochazet? mohl byste nekdo nastinit nejaky funkcni priklad...? dikes _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python Mgr. Ing. Roman MIKLÓŠ Prvá stavebná sporiteľňa a.s. Bajkalská 30, P. O. Box 48 829 48 Bratislava 25 Tel.: +421/ 2 / 582 31 174 Fax: +421/ 2 / 582 31 109
books5.xml
Description: Binary data
dombook5.py
Description: Binary data
saxbook5.py
Description: Binary data
_______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python