class AnomalyXMLParser: ANOMALY = "anomaly" ANOMALY_NAME = "name" ANOMALY_DESCRIPTION = "description" ANOMALY_SOLUTION = "solution" ANOMALY_REFERENCE = "reference" ANOMALY_REFERENCES = "references" ANOMALY_REFERENCE_TITLE = "title" ANOMALY_REFERENCE_URL = "url" def __init__(self): self._parser = expat.ParserCreate() self._parser.StartElementHandler = self.start_element self._parser.EndElementHandler = self.end_element self._parser.CharacterDataHandler = self.char_data self.anomalies = [] self.anom = None self.references = {} self.title = "" self.url = "" self.tag = "" def parse(self, filename): with open(filename) as file: content = file.read() self.feed(content) def feed(self, data): self._parser.Parse(data, 0) def close(self): self._parser.Parse("", 1) del self._parser def start_element(self, name, attrs): if name == self.ANOMALY: self.anom = Anomaly() self.anom.set_name(attrs[self.ANOMALY_NAME]) elif name == self.ANOMALY_DESCRIPTION: self.tag = self.ANOMALY_DESCRIPTION elif name == self.ANOMALY_SOLUTION: # self.tag = self.ANOMALY_SOLUTION self.anom.set_solution(attrs["text"]) elif name == self.ANOMALY_REFERENCES: self.references = {} elif name == self.ANOMALY_REFERENCE: self.tag = self.ANOMALY_REFERENCE elif name == self.ANOMALY_REFERENCE_TITLE: self.tag = self.ANOMALY_REFERENCE_TITLE elif name == self.ANOMALY_REFERENCE_URL: self.tag = self.ANOMALY_REFERENCE_URL def end_element(self, name): if name == self.ANOMALY: self.anomalies.append(self.anom) elif name == self.ANOMALY_REFERENCE: self.references[self.title] = self.url elif name == self.ANOMALY_REFERENCES: self.anom.set_references(self.references) def char_data(self, data): if self.tag == self.ANOMALY_DESCRIPTION: self.anom.set_description(data) # elif self.tag==self.ANOMALY_SOLUTION: # self.anom.set_solution(data) elif self.tag == self.ANOMALY_REFERENCE_TITLE: self.title = data elif self.tag == self.ANOMALY_REFERENCE_URL: self.url = data self.tag = "" def get_anomalies(self): return self.anomalies