Я преобразовал часть своего Python 2 кода в 3, и версия 3 усекает xml элементы, содержащие '
. Я получаю очень большой поток от веб-службы, которая содержит 'The Python 3 версия моего приложения усекает 'и все, что за ним, из элемента. Приложение использует объект XMLParser из библиотеки xml .etree.ElementTree,
У меня есть обходной путь для регулярных выражений, но я задаюсь вопросом, есть ли лучший и более эффективный способ, так как проблема затрагивает лишь небольшое количество большой поток
class ParserTargetFromLFM(object):
def __init__(self):
"""Constructor"""
self.scrobble = {}
self.dataFunc = None
self.scrobbleList = []
def re_init_targ(self):
self.scrobble = {}
self.scrobbleList = []
self.dataFunc = None
def album_data(self, data):
self.scrobble['album'] = data
def start(self, tag, attrib):
try:
if tag == 'album':
if 'mbid' in attrib:
self.scrobble['albummbid'] = attrib['mbid']
self.dataFunc = self.album_data
except Exception as exc:
raise
def data(self, data):
if self.dataFunc is not None:
self.dataFunc(data)
self.dataFunc = None
def end(self, tag):
if tag == 'track' and len(self.scrobble) > 0:
self.scrobbleList.append(self.scrobble)
def close(self):
return self.scrobbleList
from xml.etree.ElementTree import XMLParser
import re
regex = re.compile(b''')
targ = ParserTargetFromLFM()
parser = XMLParser(target = targ, encoding = 'utf-8')
scrobble_xml = b'<track><album mbid="">Europe '72 [Bonus Tracks]</album></track>'
parser.feed(scrobble_xml)
print(parser.close()) #incorrectly displays [{'albummbid': '', 'album': 'Europe '}]
targ.re_init_targ()
parser = XMLParser(target = targ, encoding = 'utf-8')
scrobble_xml = regex.sub(b"\'", scrobble_xml)
parser.feed(scrobble_xml)
print(parser.close()) #correctly displays [{'albummbid': '', 'album': "Europe '72 [Bonus Tracks]"}]