Форум сайта python.su
Доброго время суток….
Вот заинтересовался питоном…почитал….плохих отзывов практически не нашел-)
Потихоньку начал изучать…
вопрос такой, стоит задача: есть xml файл…вытащить от туда данные в форму какую-ниб для редактирования и печати и снова их положить в xml файл.
Легко реализуемо ли это на питоне? если да, то что посоветуете использовать DOM или SAX… в принципе скорость обработки не важна…просто чтобы заморочек было меньше….
если у кого нибудь есть пример как скажем через DOM вытащить данные не могли бы здесь выложить….
Вот такая просьба.
Офлайн
Офлайн
Офлайн
Спасибо, но был я на этих ссылках…мне бы какой нибудь реальнй маленький примерчик…один с описанием на русском языке….. а то там всего очень много
Офлайн
вот пример простенького кода
from xml.sax.handler import ContentHandler
import xml.sax
import sys
class textHandler(ContentHandler):
def characters(self, ch):
sys.stdout.write(ch.encode(“cp1251”))
parser = xml.sax.make_parser()
handler = textHandler()
parser.setContentHandler(handler)
parser.parse(“myxml.xml”)
не работает((( что не так? выдает следуещее:
Traceback (most recent call last):
File “C:\Python24\xmltotext.py”, line 12, in -toplevel-
parser.parse(“myxml.xml”)
File “C:\Python24\lib\xml\sax\expatreader.py”, line 107, in parse
xmlreader.IncrementalParser.parse(self, source)
File “C:\Python24\lib\xml\sax\xmlreader.py”, line 123, in parse
self.feed(buffer)
File “C:\Python24\lib\xml\sax\expatreader.py”, line 211, in feed
self._err_handler.fatalError(exc)
File “C:\Python24\lib\xml\sax\handler.py”, line 38, in fatalError
raise exception
SAXParseException: myxml.xml:2:0: xml declaration not at start of external entity
Офлайн
Код рабочий, смотри структуру xml документа.
Офлайн
Хорошо….я чуть упростил…теперь он выводит текст, если тот в простых тегах, например таких <Name> Тест </Name>
но если усложнить структуру, например: <Data number=“300” date=“2006-09-14” /> то он ничего не выводит…..мне нужно чтобы выводило то что в кавычках…. как это прописать?
Офлайн
Тебе надо реализовать метод startElement(self, name, attrs).
attrs - объект класса AttributesImpl из xml.sax.xmlreader. А вообще советую просто посмотреть код этих модулей, там все очень хорошо документировано.
Офлайн
Спасиб.
Вот что нашел:
import string import xml.sax from xml.sax import handler from xml.sax.xmlreader import InputSource class contentHandler(handler.ContentHandler): def __init__(self): self.cur_data = "" self.stack = [] self.value = None def startElement(self, name, attrs): print name, attrs content_handler = contentHandler() input = open("myxml.xml", "r") input_source = InputSource() input_source.setByteStream(input) xml_reader = xml.sax.make_parser() xml_reader.setContentHandler(content_handler) xml_reader.parse(input_source)
Офлайн
Все так, просто это не string, а объект класса AttributesImpl(см. предыдущий пост).
Н-р если тебе надо получить значение аттрибута val(если он есть), то код будет такой:
def startElement(self, name, attrs): if attrs.has_key(u'val'): print attrs.getValue(u'val')
Офлайн