Python SAX-разбор - PullRequest
       52

Python SAX-разбор

0 голосов
/ 18 февраля 2020

Я работаю над заданием, данным мне наставником, который учит меня, как использовать 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)
...