Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2006 20:50:47

Sup
От:
Зарегистрирован: 2006-09-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

XML и Python

Доброго время суток….
Вот заинтересовался питоном…почитал….плохих отзывов практически не нашел-)
Потихоньку начал изучать…

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

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

Вот такая просьба.



Офлайн

#2 Сен. 14, 2006 09:04:13

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Офлайн

#3 Сен. 14, 2006 09:07:28

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Офлайн

#4 Сен. 14, 2006 09:54:04

Sup
От:
Зарегистрирован: 2006-09-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

XML и Python

Спасибо, но был я на этих ссылках…мне бы какой нибудь реальнй маленький примерчик…один с описанием на русском языке….. а то там всего очень много



Офлайн

#5 Сен. 14, 2006 11:14:32

Sup
От:
Зарегистрирован: 2006-09-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

XML и Python

вот пример простенького кода

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



Офлайн

#6 Сен. 14, 2006 11:42:56

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

XML и Python

Код рабочий, смотри структуру xml документа.



Офлайн

#7 Сен. 14, 2006 12:17:51

Sup
От:
Зарегистрирован: 2006-09-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

XML и Python

Хорошо….я чуть упростил…теперь он выводит текст, если тот в простых тегах, например таких <Name> Тест </Name>
но если усложнить структуру, например: <Data number=“300” date=“2006-09-14” /> то он ничего не выводит…..мне нужно чтобы выводило то что в кавычках…. как это прописать?



Офлайн

#8 Сен. 14, 2006 12:45:19

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

XML и Python

Тебе надо реализовать метод startElement(self, name, attrs).
attrs - объект класса AttributesImpl из xml.sax.xmlreader. А вообще советую просто посмотреть код этих модулей, там все очень хорошо документировано.



Офлайн

#9 Сен. 14, 2006 15:05:15

Sup
От:
Зарегистрирован: 2006-09-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

XML и Python

Спасиб.
Вот что нашел:

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>

что-то не так с атрибутами???



Офлайн

#10 Сен. 14, 2006 15:24:14

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

XML и Python

Все так, просто это не 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).



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version