def parse(cls, xml): result = PositionPacket() result.items = [] root = parseString(xml) assert root.tag == PositionPacket.ROOT_NAME for child in root: if child.tag == 'money_position': result.items.append(MoneyPosition(child)) elif child.tag == 'sec_position': result.items.append(SecurityPosition(child)) return result
def parse(cls, xml): result = ClientOrderPacket() result.items = [] root = parseString(xml) assert root.tag == ClientOrderPacket.ROOT_NAME for child in root: if child.tag == Order.ROOT_NAME: result.items.append(Order(child)) elif child.tag == StopOrder.ROOT_NAME: for subchild in child: if subchild.tag == 'stoploss': result.items.append(StopLoss(child)) elif subchild.tag == 'takeprofit': result.items.append(TakeProfit(child)) return result
def parse(xml): """ Общая функция парсинга xml-структур. :param xml: Текст XML. :return: Распарсенный объект. None если не распознан. """ # Корневой тег достанем root = parseString(xml).tag # Пройдемся по всем классам модуля и найдем подходящий for cls in _MY_CLASSES: if root == cls.ROOT_NAME: return cls.parse(xml) # Лабуда какая-то пришла LOG.error(f"Unsupported XML:\n{xml}") return None
def parse_xml_object(cls, data, url): doc = xmlmap.parseString(data, url) return cls(doc)