Sup
Сен. 13, 2006 20:50:47
Доброго время суток….
Вот заинтересовался питоном…почитал….плохих отзывов практически не нашел-)
Потихоньку начал изучать…
вопрос такой, стоит задача: есть xml файл…вытащить от туда данные в форму какую-ниб для редактирования и печати и снова их положить в xml файл.
Легко реализуемо ли это на питоне? если да, то что посоветуете использовать DOM или SAX… в принципе скорость обработки не важна…просто чтобы заморочек было меньше….
если у кого нибудь есть пример как скажем через DOM вытащить данные не могли бы здесь выложить….
Вот такая просьба.
slav0nic
Сен. 14, 2006 09:04:13
slav0nic
Сен. 14, 2006 09:07:28
Sup
Сен. 14, 2006 09:54:04
Спасибо, но был я на этих ссылках…мне бы какой нибудь реальнй маленький примерчик…один с описанием на русском языке….. а то там всего очень много
Sup
Сен. 14, 2006 11:14:32
вот пример простенького кода
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
slivlen
Сен. 14, 2006 11:42:56
Код рабочий, смотри структуру xml документа.
Sup
Сен. 14, 2006 12:17:51
Хорошо….я чуть упростил…теперь он выводит текст, если тот в простых тегах, например таких <Name> Тест </Name>
но если усложнить структуру, например: <Data number=“300” date=“2006-09-14” /> то он ничего не выводит…..мне нужно чтобы выводило то что в кавычках…. как это прописать?
slivlen
Сен. 14, 2006 12:45:19
Тебе надо реализовать метод startElement(self, name, attrs).
attrs - объект класса AttributesImpl из xml.sax.xmlreader. А вообще советую просто посмотреть код этих модулей, там все очень хорошо документировано.
Sup
Сен. 14, 2006 15:05:15
Спасиб.
Вот что нашел:
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)
но вот что получилось:
Data <xml.sax.xmlreader.AttributesImpl instance at 0x00A88850>
Name <xml.sax.xmlreader.AttributesImpl instance at 0x00A465D0>
что-то не так с атрибутами???
slivlen
Сен. 14, 2006 15:24:14
Все так, просто это не string, а объект класса AttributesImpl(см. предыдущий пост).
Н-р если тебе надо получить значение аттрибута val(если он есть), то код будет такой:
def startElement(self, name, attrs):
if attrs.has_key(u'val'):
print attrs.getValue(u'val')
P.S. Sup юзай подсветку синтаксиса, чтоб код читался легче(
http://www.python.com.ua/forum/viewtopic.php?id=49).