1728 return element_class[0] |
1728 return element_class[0] |
1729 return element_class |
1729 return element_class |
1730 |
1730 |
1731 class XMLClassParser(etree.XMLParser): |
1731 class XMLClassParser(etree.XMLParser): |
1732 |
1732 |
1733 def __init__(self, namespaces, default_namespace_format, base_class, *args, **kwargs): |
1733 def __init__(self, namespaces, default_namespace_format, base_class, xsd_schema, *args, **kwargs): |
1734 etree.XMLParser.__init__(self, *args, **kwargs) |
1734 etree.XMLParser.__init__(self, *args, **kwargs) |
1735 self.DefaultNamespaceFormat = default_namespace_format |
1735 self.DefaultNamespaceFormat = default_namespace_format |
1736 self.NSMAP = namespaces |
1736 self.NSMAP = namespaces |
1737 targetNamespace = etree.QName(default_namespace_format % "d").namespace |
1737 targetNamespace = etree.QName(default_namespace_format % "d").namespace |
1738 if targetNamespace is not None: |
1738 if targetNamespace is not None: |
1740 name if targetNamespace != uri else None: uri |
1740 name if targetNamespace != uri else None: uri |
1741 for name, uri in namespaces.iteritems()} |
1741 for name, uri in namespaces.iteritems()} |
1742 else: |
1742 else: |
1743 self.RootNSMAP = namespaces |
1743 self.RootNSMAP = namespaces |
1744 self.BaseClass = base_class |
1744 self.BaseClass = base_class |
|
1745 self.XSDSchema = xsd_schema |
1745 |
1746 |
1746 def set_element_class_lookup(self, class_lookup): |
1747 def set_element_class_lookup(self, class_lookup): |
1747 etree.XMLParser.set_element_class_lookup(self, class_lookup) |
1748 etree.XMLParser.set_element_class_lookup(self, class_lookup) |
1748 self.ClassLookup = class_lookup |
1749 self.ClassLookup = class_lookup |
|
1750 |
|
1751 def LoadXMLString(self, xml_string): |
|
1752 tree = etree.fromstring(xml_string, self) |
|
1753 if not self.XSDSchema.validate(tree): |
|
1754 error = self.XSDSchema.error_log.last_error |
|
1755 return tree, (error.line, error.message) |
|
1756 return tree, None |
1749 |
1757 |
1750 def Dumps(self, xml_obj): |
1758 def Dumps(self, xml_obj): |
1751 return etree.tostring(xml_obj) |
1759 return etree.tostring(xml_obj) |
1752 |
1760 |
1753 def Loads(self, xml_string): |
1761 def Loads(self, xml_string): |
1791 |
1799 |
1792 parser = XMLClassParser( |
1800 parser = XMLClassParser( |
1793 factory.NSMAP, |
1801 factory.NSMAP, |
1794 factory.etreeNamespaceFormat, |
1802 factory.etreeNamespaceFormat, |
1795 BaseClass[0] if len(BaseClass) == 1 else None, |
1803 BaseClass[0] if len(BaseClass) == 1 else None, |
1796 schema = etree.XMLSchema(etree.fromstring(xsdstring)), |
1804 etree.XMLSchema(etree.fromstring(xsdstring)), |
1797 strip_cdata = False, remove_blank_text=True) |
1805 strip_cdata = False, remove_blank_text=True) |
1798 class_lookup = XMLElementClassLookUp(factory.ComputedClassesLookUp) |
1806 class_lookup = XMLElementClassLookUp(factory.ComputedClassesLookUp) |
1799 parser.set_element_class_lookup(class_lookup) |
1807 parser.set_element_class_lookup(class_lookup) |
1800 |
1808 |
1801 return parser |
1809 return parser |