Source code for xsdata.formats.dataclass.parsers.nodes.standard

from typing import Dict, List, Optional, Type

from xsdata.exceptions import XmlContextError
from xsdata.formats.dataclass.parsers.mixins import XmlNode
from xsdata.formats.dataclass.parsers.utils import ParserUtils
from xsdata.models.enums import DataType


[docs] class StandardNode(XmlNode): """ XmlNode for any type elements with a standard xsi:type. :param datatype: Standard xsi data type :param ns_map: Namespace prefix-URI map :param nillable: Specify whether the node supports nillable content :param derived_factory: Optional derived element factory """ __slots__ = "datatype", "ns_map", "nillable", "derived_factory" def __init__( self, datatype: DataType, ns_map: Dict, nillable: bool, derived_factory: Optional[Type], ): self.datatype = datatype self.ns_map = ns_map self.nillable = nillable self.derived_factory = derived_factory
[docs] def bind( self, qname: str, text: Optional[str], tail: Optional[str], objects: List ) -> bool: obj = ParserUtils.parse_value( value=text, types=[self.datatype.type], ns_map=self.ns_map, format=self.datatype.format, ) if obj is None and not self.nillable: obj = "" if self.datatype.wrapper: obj = self.datatype.wrapper(obj) if self.derived_factory: obj = self.derived_factory(qname=qname, value=obj) objects.append((qname, obj)) return True
[docs] def child(self, qname: str, attrs: Dict, ns_map: Dict, position: int) -> XmlNode: raise XmlContextError("Primitive node doesn't support child nodes!")