'Parse the MusicXML <harmony> element.'

def _parse(self):

    self.time_position = self.state.time_position
    for child in self.xml_harmony:
        if (child.tag == 'root'):
            self._parse_root(child)
        elif (child.tag == 'kind'):
            if (child.text is None):
                continue
            kind_text = str(child.text).strip()
            if (kind_text not in self.CHORD_KIND_ABBREVIATIONS):
                raise ChordSymbolParseException(('Unknown    chord    kind:    ' + kind_text))
            self.kind = self.CHORD_KIND_ABBREVIATIONS[kind_text]
        elif (child.tag == 'degree'):
            self.degrees.append(self._parse_degree(child))
        elif (child.tag == 'bass'):
            self._parse_bass(child)
        elif (child.tag == 'offset'):
            try:
                offset = int(child.text)
            except ValueError:
                raise ChordSymbolParseException(('Non-integer    offset:    ' + str(child.text)))
            midi_ticks = ((offset * constants.STANDARD_PPQ) / self.state.divisions)
            seconds = ((midi_ticks / constants.STANDARD_PPQ) * self.state.seconds_per_quarter)
            self.time_position += seconds
        else:
            pass
    if ((self.root is None) and (self.kind != 'N.C.')):
        raise ChordSymbolParseException('Chord    symbol    must    have    a    root')
