[docs]@dataclassclassXmlParser(NodeParser):""" Default Xml parser for dataclasses. :param config: Parser configuration :param context: Model context provider :param handler: Override default XmlHandler :ivar ms_map: The prefix-URI map generated during parsing """handler:Type[XmlHandler]=field(default=default_handler())
[docs]@dataclassclassUserXmlParser(NodeParser):""" User Xml parser for dataclasses with hooks for emitting events to alter the behavior when an elements starts or ends. :param config: Parser configuration :param context: Model context provider :param handler: Override default XmlHandler :ivar ms_map: The prefix-URI map generated during parsing :ivar emit_cache: Qname to event name cache """handler:Type[XmlHandler]=field(default=default_handler())emit_cache:Dict=field(init=False,default_factory=dict)
[docs]defemit_event(self,event:str,name:str,**kwargs:Any):""" Propagate event to subclasses. Match event and name to a subclass method and trigger it with any input keyword arguments. Example:: event=start, name={urn}bookTitle -> start_booking_title(**kwargs) :param event: Event type start|end :param name: Element qualified name :param kwargs: Event keyword arguments """key=(event,name)ifkeynotinself.emit_cache:method_name=f"{event}_{snake_case(local_name(name))}"self.emit_cache[key]=getattr(self,method_name,None)method=self.emit_cache[key]ifmethod:method(**kwargs)