Найти - Пользователи
Полная версия: Как добраться до атрибутов <?xml?>?
Начало » Python для экспертов » Как добраться до атрибутов <?xml?>?
1
Vasilych
Добрый день!
Разбираю xml файл. Как работает SAX разобрался, вытаскиваю все что нужно. Но вопрос, как получить значение encoding из заголовка <?xml version=“1.0” encoding=“windows-1251” ?> ? Метод startElemen из ContentHandler его пропускает.

Спасибо.
ZZZ
SAX этого не умеет.
Можно создать промежуточный класс для файлогого объекта, передаваемого в парсер и вытащить то, что нужно с помощью re. Что-то типа этого: r"<?xml\s+*\s+encoding=\“(.+)\”*>".
Vasilych
ZZZ
SAX этого не умеет.
Можно создать промежуточный класс для файлогого объекта, передаваемого в парсер и вытащить то, что нужно с помощью re. Что-то типа этого: r"<?xml\s+*\s+encoding=\“(.+)\”*>".
Жаль что не умеет…. Будем пробовать так. Спасибо.
proDiva
Примерчик, думаю, поможет:

# -*- 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
а beautiful soup? я сам пока с xml не работал, но много слышал об этом модуле.
ZZZ
proDiva
Примерчик, думаю, поможет:


import xml.dom.minidom

Речь шла о SAX, а он для многих вещей удобнее, чем DOM.
Например при потоковой обработке…

P.S. Классный аватар, proDiva!
proDiva
Vasilych
Добрый день!
Разбираю xml файл. Как работает SAX разобрался, вытаскиваю все что нужно. Но вопрос, как получить значение encoding из заголовка <?xml version=“1.0” encoding=“windows-1251” ?> ? Метод startElemen из ContentHandler его пропускает.

Спасибо.
Я отвечала на вопрос, как получить значение encoding. Я лично пользуюсь модулем dom, он выполняет все задачи, которые я перед ним ставлю))
PooH
proDiva
Я отвечала на вопрос, как получить значение encoding. Я лично пользуюсь модулем dom, он выполняет все задачи, которые я перед ним ставлю))
Это вам еще не приходилось обрабатывать действительно большие XML файлы ;)
ZAN
ZZZ
Речь шла о SAX, а он для многих вещей удобнее, чем DOM.
Например при потоковой обработке…
Если для парсинга XML скорости DOM парсера бывает вполне достаточно, то на запись DOM работает совсем никак… более чем на порядок медленее, чем на чтение…
Простенький MarkUpWriter в связке с SAX парсером порой бывает единственным решением для поточной обработки XML.
ZZZ
ZAN
Если для парсинга XML скорости DOM парсера бывает вполне достаточно, то на запись DOM работает совсем никак… более чем на порядок медленее, чем на чтение…
Тоже сталкивался… Для отправки XMPP у клиента его хватает с головой, но на сервере уж лучше ручками писать, иначе на тысячном клиенте придётся новое железо брать…
Да и при правильном подходе, когда нет особого разнобоя, структура пакетов известна зарание… SAX и для парсинга удобнее оказывается.
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