Найти - Пользователи
Полная версия: XML и Python
Начало » Python для экспертов » XML и Python
1 2
Sup
Доброго время суток….
Вот заинтересовался питоном…почитал….плохих отзывов практически не нашел-)
Потихоньку начал изучать…

вопрос такой, стоит задача: есть xml файл…вытащить от туда данные в форму какую-ниб для редактирования и печати и снова их положить в xml файл.

Легко реализуемо ли это на питоне? если да, то что посоветуете использовать DOM или SAX… в принципе скорость обработки не важна…просто чтобы заморочек было меньше….
если у кого нибудь есть пример как скажем через DOM вытащить данные не могли бы здесь выложить….

Вот такая просьба.
slav0nic
http://python.com.ua/forum/viewtopic.php?id=68
Sup
Спасибо, но был я на этих ссылках…мне бы какой нибудь реальнй маленький примерчик…один с описанием на русском языке….. а то там всего очень много
Sup
вот пример простенького кода

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
Код рабочий, смотри структуру xml документа.
Sup
Хорошо….я чуть упростил…теперь он выводит текст, если тот в простых тегах, например таких <Name> Тест </Name>
но если усложнить структуру, например: <Data number=“300” date=“2006-09-14” /> то он ничего не выводит…..мне нужно чтобы выводило то что в кавычках…. как это прописать?
slivlen
Тебе надо реализовать метод startElement(self, name, attrs).
attrs - объект класса AttributesImpl из xml.sax.xmlreader. А вообще советую просто посмотреть код этих модулей, там все очень хорошо документировано.
Sup
Спасиб.
Вот что нашел:
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
Все так, просто это не 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).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB