Я работаю над заданием, данным мне наставником, который учит меня, как использовать Python для обработки XML файлов. Вот фрагмент примера файла, который он мне дал:
<numbers>
<number_set id = "alpha">
<number>5</number>
<number value="10.2" />
<number value="3" />
<number><integer>5</integer><real>5.2</real></number>
</number_set>
И это часть его задания c Я борюсь с:
Создать класс для представляют набор чисел. Этот класс должен содержать имя набора номеров, а также структуру данных, которую вы можете использовать для доступа к классу номеров для каждого узла номера в наборе номеров.
Я использую xml .sax библиотека и возникли проблемы с выяснением, как определить мои функции синтаксического анализа, чтобы они связывали все значения числового узла с набором number_set, который их содержит. Это мой код:
class NumberSAX (xml.sax.ContentHandler):
def __init__(self):
xml.sax.ContentHandler.__init__(self)
self.__number = []
self.__numberSet = {}
self.__type = ""
self.__format = ""
def startElement(self, name, attrs):
if name == "number":
numAttrs = attrs.getNames()
if "value" in numAttrs:
theNumber = attrs.getValue("value")
# Convert strings in array to floats
isFloat = float(theNumber)
# Append to number array
self.__number.append(isFloat)
# Parse number sets.
elif name == "number_set":
# Get names of the attributes in the number_set node.
setAttrs = attrs.getNames()
# If "id" is one of those attributes,
if "id" in setAttrs:
# get the value of "id",
setId = attrs.getValue("id")
# add it as a key to the __numberSet dictionary with the value of another dictionary,
self.__numberSet[setId] = {}
# and create a new class attribute, which gets assigned the setId (Why? Isn't this overwritten at the start of each number_set?)
self.__setId = setId
def endElement(self, name):
def characters(self, content):
thecontent = content.strip()
if len(thecontent) >= 1:
isFloat = float(thecontent)
self.__number.append(isFloat)