Python 3 преобразования; xml .etree.ElementTree усекает xml элементы, которые содержат экранированный апостроф - PullRequest
0 голосов
/ 06 апреля 2020

Я преобразовал часть своего 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 &apos;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]"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...