def build_element_node( self, clazz: Type, attrs: Dict, ns_map: Dict, position: int, derived: bool, xsi_type: Optional[str] = None, ) -> Optional[XmlNode]: meta = self.context.fetch(clazz, self.meta.namespace, xsi_type) if not meta or (meta.nillable and not ParserUtils.is_nillable(attrs)): return None return ElementNode( meta=meta, config=self.config, attrs=attrs, ns_map=ns_map, context=self.context, position=position, derived=derived, substituted=xsi_type is not None, mixed=self.meta.has_var(mode=FindMode.MIXED_CONTENT), )
def build_element_node( self, clazz: Optional[Type], attrs: Dict, ns_map: Dict, position: int, derived: bool, ) -> Optional[XmlNode]: xsi_type = ParserUtils.xsi_type(attrs, ns_map) if clazz is None: if not xsi_type: return None clazz = self.context.find_type(xsi_type) xsi_type = None if clazz is None: return None is_nillable = ParserUtils.is_nillable(attrs) meta = self.context.fetch(clazz, self.meta.namespace, xsi_type) if not is_nillable and meta.nillable: return None return ElementNode( meta=meta, config=self.config, attrs=attrs, ns_map=ns_map, context=self.context, position=position, derived=derived, mixed=self.meta.has_var(mode=FindMode.MIXED_CONTENT), )