Я выполняю анализ XML для списка файлов XML. Я использую модуль, который переопределяет класс XMLParser дерева элементов. Это код -
import sys
sys.modules['_elementtree'] = None
try:
sys.modules.pop('xml.etree.ElementTree')
except KeyError:
pass
import xml.etree.ElementTree as ET
class Parse():
def __init__(self):
self.xmlFiles = [list_of_xmlFile_paths]
def parse_xml_files(self):
for filepath in self.xmlFiles:
root = ET.parse(filepath, LineNumberingParser()).getroot()
for elem in root:
print(elem.start_line_numer, elem.end_line_number)
class LineNumberingParser(ET.XMLParser):
def _start(self, *args, **kwargs):
# Here we assume the default XML parser which is expat
# and copy its element position attributes into output Elements
self.element = super(self.__class__, self)._start(*args, **kwargs)
self.element.start_line_number = self.parser.CurrentLineNumber
self.element.start_column_number = self.parser.CurrentColumnNumber
return self.element
def _end(self, *args, **kwargs):
self.element = super(self.__class__, self)._end(*args, **kwargs)
self.element.end_line_number = self.parser.CurrentLineNumber
self.element.end_column_number = self.parser.CurrentColumnNumber
return self.element
Класс LineNumberingParser дает мне начальную строку, конечную строку узла xml. Моя проблема в том, что для каждого файла XML инициализируется класс. Так что эта повторяющаяся инициализация неэффективна. Как я могу сделать это, инициализируя класс только один раз? Может кто-нибудь, пожалуйста, предложите.