55 text.data = value |
55 text.data = value |
56 attr.childNodes[0] = text |
56 attr.childNodes[0] = text |
57 node._attrs[name] = attr |
57 node._attrs[name] = attr |
58 |
58 |
59 |
59 |
60 """ |
60 # Regular expression models for checking all kind of |
61 Regular expression models for checking all kind of string values defined in XML |
61 # string values defined in XML standard |
62 standard |
62 |
63 """ |
|
64 Name_model = re.compile('([a-zA-Z_\:][\w\.\-\:]*)$') |
63 Name_model = re.compile('([a-zA-Z_\:][\w\.\-\:]*)$') |
65 Names_model = re.compile('([a-zA-Z_\:][\w\.\-\:]*(?: [a-zA-Z_\:][\w\.\-\:]*)*)$') |
64 Names_model = re.compile('([a-zA-Z_\:][\w\.\-\:]*(?: [a-zA-Z_\:][\w\.\-\:]*)*)$') |
66 NMToken_model = re.compile('([\w\.\-\:]*)$') |
65 NMToken_model = re.compile('([\w\.\-\:]*)$') |
67 NMTokens_model = re.compile('([\w\.\-\:]*(?: [\w\.\-\:]*)*)$') |
66 NMTokens_model = re.compile('([\w\.\-\:]*(?: [\w\.\-\:]*)*)$') |
68 QName_model = re.compile('((?:[a-zA-Z_][\w]*:)?[a-zA-Z_][\w]*)$') |
67 QName_model = re.compile('((?:[a-zA-Z_][\w]*:)?[a-zA-Z_][\w]*)$') |
1009 def GetEquivalentParents(self, parent): |
1008 def GetEquivalentParents(self, parent): |
1010 return reduce(lambda x, y: x + y, |
1009 return reduce(lambda x, y: x + y, |
1011 [[p] + self.GetEquivalentParents(p) |
1010 [[p] + self.GetEquivalentParents(p) |
1012 for p in self.EquivalentClassesParent.get(parent, {}).keys()], []) |
1011 for p in self.EquivalentClassesParent.get(parent, {}).keys()], []) |
1013 |
1012 |
1014 """ |
|
1015 Methods that generates the classes |
|
1016 """ |
|
1017 def CreateClasses(self): |
1013 def CreateClasses(self): |
|
1014 """ |
|
1015 Method that generates the classes |
|
1016 """ |
1018 self.ParseSchema() |
1017 self.ParseSchema() |
1019 for name, infos in self.Namespaces[self.TargetNamespace].items(): |
1018 for name, infos in self.Namespaces[self.TargetNamespace].items(): |
1020 if infos["type"] == ELEMENT: |
1019 if infos["type"] == ELEMENT: |
1021 if not isinstance(infos["elmt_type"], (UnicodeType, StringType)) and \ |
1020 if not isinstance(infos["elmt_type"], (UnicodeType, StringType)) and \ |
1022 infos["elmt_type"]["type"] == COMPLEXTYPE: |
1021 infos["elmt_type"]["type"] == COMPLEXTYPE: |
1185 self.AddToLookupClass(name, parent, class_definition) |
1184 self.AddToLookupClass(name, parent, class_definition) |
1186 self.AddToLookupClass(classname, None, class_definition) |
1185 self.AddToLookupClass(classname, None, class_definition) |
1187 |
1186 |
1188 return class_infos |
1187 return class_infos |
1189 |
1188 |
1190 """ |
|
1191 Methods that print the classes generated |
|
1192 """ |
|
1193 def PrintClasses(self): |
1189 def PrintClasses(self): |
|
1190 """ |
|
1191 Method that print the classes generated |
|
1192 """ |
1194 items = self.ComputedClasses.items() |
1193 items = self.ComputedClasses.items() |
1195 items.sort() |
1194 items.sort() |
1196 if self.FileName is not None: |
1195 if self.FileName is not None: |
1197 for filename, classes in items: |
1196 for filename, classes in items: |
1198 print("File '%s':" % filename) |
1197 print("File '%s':" % filename) |
1723 def countMethod(self): |
1722 def countMethod(self): |
1724 return len(getattr(self, attr)) |
1723 return len(getattr(self, attr)) |
1725 return countMethod |
1724 return countMethod |
1726 |
1725 |
1727 |
1726 |
1728 """ |
|
1729 This function generate a xml parser from a class factory |
|
1730 """ |
|
1731 |
|
1732 NAMESPACE_PATTERN = re.compile("xmlns(?:\:[^\=]*)?=\"[^\"]*\" ") |
1727 NAMESPACE_PATTERN = re.compile("xmlns(?:\:[^\=]*)?=\"[^\"]*\" ") |
1733 |
1728 |
1734 |
1729 |
1735 class DefaultElementClass(etree.ElementBase): |
1730 class DefaultElementClass(etree.ElementBase): |
1736 |
1731 |
1843 new_element._init_() |
1838 new_element._init_() |
1844 return new_element |
1839 return new_element |
1845 |
1840 |
1846 |
1841 |
1847 def GenerateParser(factory, xsdstring): |
1842 def GenerateParser(factory, xsdstring): |
|
1843 """ |
|
1844 This function generate a xml parser from a class factory |
|
1845 """ |
|
1846 |
1848 ComputedClasses = factory.CreateClasses() |
1847 ComputedClasses = factory.CreateClasses() |
1849 |
1848 |
1850 if factory.FileName is not None: |
1849 if factory.FileName is not None: |
1851 ComputedClasses = ComputedClasses[factory.FileName] |
1850 ComputedClasses = ComputedClasses[factory.FileName] |
1852 BaseClass = [(name, XSDclass) for name, XSDclass in ComputedClasses.items() if XSDclass.IsBaseClass] |
1851 BaseClass = [(name, XSDclass) for name, XSDclass in ComputedClasses.items() if XSDclass.IsBaseClass] |