Vasilych
Апрель 24, 2008 22:08:36
Добрый день!
Разбираю xml файл. Как работает SAX разобрался, вытаскиваю все что нужно. Но вопрос, как получить значение encoding из заголовка <?xml version=“1.0” encoding=“windows-1251” ?> ? Метод startElemen из ContentHandler его пропускает.
Спасибо.
ZZZ
Апрель 25, 2008 00:14:02
SAX этого не умеет.
Можно создать промежуточный класс для файлогого объекта, передаваемого в парсер и вытащить то, что нужно с помощью re. Что-то типа этого: r"<?xml\s+*\s+encoding=\“(.+)\”*>".
Vasilych
Апрель 25, 2008 06:30:56
ZZZ
SAX этого не умеет.
Можно создать промежуточный класс для файлогого объекта, передаваемого в парсер и вытащить то, что нужно с помощью re. Что-то типа этого: r"<?xml\s+*\s+encoding=\“(.+)\”*>".
Жаль что не умеет…. Будем пробовать так. Спасибо.
proDiva
Апрель 25, 2008 12:02:19
Примерчик, думаю, поможет:
# -*- coding: cp1251 -*-
“”“Работа с xml-файлами”“”
import xml.dom.minidom
in_file = ‘c:/xml_upd/PacketEPD.xml’
class func_xml:
def onInit(self, infile):
dom = xml.dom.minidom.parse(infile)
dom.normalize()
print u'Кодировка - ‘+dom.encoding
self.xml_tree(dom)
def xml_tree(self, node):
atts = node.attributes or {}
if node.nodeType == node.TEXT_NODE:
print node.nodeValue.strip()
for k, v in atts.items():
print u’Элемент: ‘+k+u’\nЗначение: '+v
for child in node.childNodes:
self.xml_tree(child)
return
zapusk = func_xml()
zapusk.onInit(in_file)
hellt
Апрель 25, 2008 12:24:25
а beautiful soup? я сам пока с xml не работал, но много слышал об этом модуле.
ZZZ
Апрель 26, 2008 00:01:42
proDiva
Примерчик, думаю, поможет:
…
import xml.dom.minidom
…
Речь шла о SAX, а он для многих вещей удобнее, чем DOM.
Например при потоковой обработке…
P.S. Классный аватар, proDiva!
proDiva
Апрель 29, 2008 07:30:47
Vasilych
Добрый день!
Разбираю xml файл. Как работает SAX разобрался, вытаскиваю все что нужно. Но вопрос, как получить значение encoding из заголовка <?xml version=“1.0” encoding=“windows-1251” ?> ? Метод startElemen из ContentHandler его пропускает.
Спасибо.
Я отвечала на вопрос, как получить значение encoding. Я лично пользуюсь модулем dom, он выполняет все задачи, которые я перед ним ставлю))
PooH
Апрель 29, 2008 07:46:36
proDiva
Я отвечала на вопрос, как получить значение encoding. Я лично пользуюсь модулем dom, он выполняет все задачи, которые я перед ним ставлю))
Это вам еще не приходилось обрабатывать действительно большие XML файлы ;)
ZAN
Апрель 29, 2008 13:47:21
ZZZ
Речь шла о SAX, а он для многих вещей удобнее, чем DOM.
Например при потоковой обработке…
Если для парсинга XML скорости DOM парсера бывает вполне достаточно, то на запись DOM работает совсем никак… более чем на порядок медленее, чем на чтение…
Простенький MarkUpWriter в связке с SAX парсером порой бывает единственным решением для поточной обработки XML.
ZZZ
Апрель 30, 2008 01:18:12
ZAN
Если для парсинга XML скорости DOM парсера бывает вполне достаточно, то на запись DOM работает совсем никак… более чем на порядок медленее, чем на чтение…
Тоже сталкивался… Для отправки XMPP у клиента его хватает с головой, но на сервере уж лучше ручками писать, иначе на тысячном клиенте придётся новое железо брать…
Да и при правильном подходе, когда нет особого разнобоя, структура пакетов известна зарание… SAX и для парсинга удобнее оказывается.