30. marts 2007 - 15:27Der er
6 kommentarer og 1 løsning
Python & XML
Greetings fellow browsers,
Jeg står overfor at skulle bygge en XML cache funktion på en hjemmeside, hvor både forum tråde, nyheder osv. skal gemmes i XML dokumenter for at spare på kald til postgreSQL serveren.
Hjemmesiden er programmeret i Python, og derfor skal nedestående naturligvis også udarbejdes i Python. Det skal siges at jeg aldrig har arbejdet med XML parsing før, hverken i Python eller noget andet sprog.
Da det er vidt forskelligt hvad der skal gemmes i og hentes fra XML dokumenterne, alt efter hvilken del af sitet der arbejdes på, søger jeg en funktion eller et script som kan læse og automatisk opdele XML dokumentet i Dictionaries og Lists med navne tilsvarende dem fra XML.
At skrive til XML dokumenterne løser jeg selv, da dette nok ikke kan automatiseres på helt samme måde.
Jeg håber nogen kan enten smide et stykke kode, eller et link :-)
Hertil skal det lige tilføjes at det kun lister der skal gemmes i XML og genbruges til Feeds (forum view, nyheds arkiv mv.), ikke hvert enkel topic, da alt andet nok ikke være mere CPU krævende.
import xml.dom.minidom from xml.dom.minidom import parse doc = parse("testpy.xml") all = [] for n in doc.getElementsByTagName("one"): all.append(n.childNodes[0].nodeValue) for one in all: print one
import xml.dom.minidom from xml.dom.minidom import parse doc = parse("testpy2.xml") all = {} for n in doc.getElementsByTagName("one"): all[n.attributes["k"].value] = n.childNodes[0].nodeValue for k,v in all.iteritems(): print k,":",v
Jeg er ude efter et stykke kode som kan parse et xml ark af ukendt opbygning (feks eksemplet nedenfor) og returnerer strukturen af arket i Lists/Dicts med nøgler der matcher XML arkets tags, så strukturen er intakt. Nederst er Python resultatet af dette eksempel:
XML ark, der tilhører andre steder på sitet end forummet, har en hel anden opbygning end dette. Derfor skal funktionen automatisk finde frem til navne på tags (attributes er ikke nødvendig) og gemme dem i strukturen der returneres. Læg mærke til hvordan hvert repli-tag bliver lagt ind i en liste i stedet for at overskrive sig selv, dette skal ske hver gang der er tags som gentager sig selv (havde der kun været 1 svar på tråden kan den selvfølgelig ikke vide det.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.