import StringIO
from xml.sax.saxutils import XMLGenerator
def create_sitemap(cnagfreq,priority,*links):
st = StringIO.StringIO()
g = XMLGenerator(st,encoding="UTF-8")
g.startDocument()
g.startElement('urlset', {'xmlns':"http://www.sitemaps.org/schemas/sitemap/0.9"})
for lnk in links:
g.characters("\n")
g.startElement("url", {})
g.characters("\n")
g.startElement("loc", {})
g.characters(lnk)
g.endElement("loc")
g.characters("\n")
g.startElement("changefreq", {})
g.characters(cnagfreq)
g.endElement("changefreq")
g.characters("\n")
g.startElement("priority", {})
g.characters(priority)
g.endElement("priority")
g.characters("\n")
g.endElement("url")
g.characters("\n")
g.endElement("urlset")
g.endDocument()
return st.getvalue()
lst = ["http://ya.ru/{0}.html".format(x) for x in xrange(5)]
print create_sitemap("daily","0.8",*lst)
среда, 19 мая 2010 г.
Генерация xml карты.
Иногда требуется сгенерировать xml карту для заданных ссылок. Сначала делал это за счет метода строки format, но вот решил попробовать модуль для работы с xml и набросал простенькую функцию:
Подписаться на:
Комментарии к сообщению (Atom)
Нифига не понял, как работает StringIO тут :(
ОтветитьУдалитьИ почему, кстати, именно StringIO ?
зы. cStringIO вроде как быстрее даже работает, но "it's not subclassable"
Ну конструктору класса XMLGenerator надо передать объект у которго есть метод write. Может можно как-то сразу указать строку, я не разбирался. А cStringIO это вроде че-то устаревшее.
ОтветитьУдалитьясненько.
ОтветитьУдалитьты, кстати, ещё на 2.6+ кодишь?