Форум сайта python.su
Добрый день!
Разбираю xml файл. Как работает SAX разобрался, вытаскиваю все что нужно. Но вопрос, как получить значение encoding из заголовка <?xml version=“1.0” encoding=“windows-1251” ?> ? Метод startElemen из ContentHandler его пропускает.
Спасибо.
Офлайн
SAX этого не умеет.
Можно создать промежуточный класс для файлогого объекта, передаваемого в парсер и вытащить то, что нужно с помощью re. Что-то типа этого: r"<?xml\s+*\s+encoding=\“(.+)\”*>".
Офлайн
ZZZЖаль что не умеет…. Будем пробовать так. Спасибо.
SAX этого не умеет.
Можно создать промежуточный класс для файлогого объекта, передаваемого в парсер и вытащить то, что нужно с помощью re. Что-то типа этого: r"<?xml\s+*\s+encoding=\“(.+)\”*>".
Офлайн
Примерчик, думаю, поможет:
# -*- 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)
Офлайн
а beautiful soup? я сам пока с xml не работал, но много слышал об этом модуле.
Офлайн
proDivaРечь шла о SAX, а он для многих вещей удобнее, чем DOM.
Примерчик, думаю, поможет:
…
import xml.dom.minidom
…
Отредактировано (Апрель 26, 2008 00:06:30)
Офлайн
VasilychЯ отвечала на вопрос, как получить значение encoding. Я лично пользуюсь модулем dom, он выполняет все задачи, которые я перед ним ставлю))
Добрый день!
Разбираю xml файл. Как работает SAX разобрался, вытаскиваю все что нужно. Но вопрос, как получить значение encoding из заголовка <?xml version=“1.0” encoding=“windows-1251” ?> ? Метод startElemen из ContentHandler его пропускает.
Спасибо.
Офлайн
proDivaЭто вам еще не приходилось обрабатывать действительно большие XML файлы ;)
Я отвечала на вопрос, как получить значение encoding. Я лично пользуюсь модулем dom, он выполняет все задачи, которые я перед ним ставлю))
Офлайн
ZZZЕсли для парсинга XML скорости DOM парсера бывает вполне достаточно, то на запись DOM работает совсем никак… более чем на порядок медленее, чем на чтение…
Речь шла о SAX, а он для многих вещей удобнее, чем DOM.
Например при потоковой обработке…
Офлайн
ZANТоже сталкивался… Для отправки XMPP у клиента его хватает с головой, но на сервере уж лучше ручками писать, иначе на тысячном клиенте придётся новое железо брать…
Если для парсинга XML скорости DOM парсера бывает вполне достаточно, то на запись DOM работает совсем никак… более чем на порядок медленее, чем на чтение…
Офлайн