• Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • ← Previous Change
  • Next Change →

Changeset 180 for Xml/xsd-fu/trunk/generateDS/generateDS.py

Show
Ignore:
Timestamp:
05/29/08 18:12:08 (7 months ago)
Author:
callan
Message:

Updating to generateDS-1.13a and patching with changes from 1.11a previously committed.

Files:
1 modified

  • Xml/xsd-fu/trunk/generateDS/generateDS.py (modified) (66 diffs)

Legend:

Unmodified
Added
Removed
  • Xml/xsd-fu/trunk/generateDS/generateDS.py

    r179 r180  
    1313    -s <subclassfilename>    Output file name for subclasses 
    1414    -p <prefix>              Prefix string to be pre-pended to the class names 
    15     -n <mappingfilename>     Transform names with table in mappingfilename. 
    1615    -f                       Force creation of output files.  Do not ask. 
    1716    -a <namespaceabbrev>     Namespace abbreviation, e.g. "xsd:". 
    … …  
    2928                             instead of get_var() and set_var(). 
    3029    --user-methods= <module>, 
    31     -u <module               Optional module containing user methods.  See 
     30    -u <module>              Optional module containing user methods.  See 
    3231                             section "User Methods" in the documentation. 
     32    --no-process-includes    Do not process included XML Schema files.  By 
     33                             default, generateDS.py will insert content 
     34                             from files referenced by <include ... /> 
     35                             elements into the XML Schema to be processed. 
    3336""" 
    3437 
    … …  
    6972import xml.sax.xmlreader 
    7073import logging 
     74import keyword 
     75import StringIO 
    7176 
    7277# Default logger configuration 
    … …  
    99104SaxElementDict = {} 
    100105Force = 0 
     106 
     107NamespacesDict = {} 
     108Targetnamespace = "" 
     109 
     110##NameTable = { 
     111##    'class': 'klass', 
     112##    'import': 'emport', 
     113##    'type': 'ttype', 
     114##    'pass': 'ppass', 
     115##    } 
     116 
    101117NameTable = { 
    102     'class': 'klass', 
    103     'import': 'emport', 
    104     'type': 'ttype', 
     118    'type': 'typexx', 
    105119    } 
     120for kw in keyword.kwlist: 
     121    NameTable[kw] = '%sxx' % kw 
     122 
     123 
    106124SubclassSuffix = 'Sub' 
    107125RootElement = None 
    … …  
    117135UserMethodsPath = None 
    118136UserMethodsModule = None 
     137XsdNameSpace = '' 
    119138 
    120139def set_type_constants(nameSpace): 
    … …  
    129148        DateTimeType, DateType, \ 
    130149        ComplexContentType, ExtensionType, \ 
    131         IDType, IDREFType, IDREFSType, \ 
     150        IDType, IDREFType, IDREFSType, IDTypes, \ 
     151        NameType, NCNameType, QNameType, NameTypes, \ 
    132152        AnyAttributeType, SimpleTypeType, RestrictionType, \ 
    133         WhiteSpaceType, ListType, EnumerationType, UnionType 
     153        WhiteSpaceType, ListType, EnumerationType, UnionType, \ 
     154        OtherSimpleTypes 
    134155    AttributeGroupType = nameSpace + 'attributeGroup' 
    135156    AttributeType = nameSpace + 'attribute' 
    … …  
    165186    IDREFType = nameSpace + 'IDREF' 
    166187    IDType = nameSpace + 'ID' 
     188    IDTypes = (IDREFSType, IDREFType, IDType, ) 
    167189    SchemaType = nameSpace + 'schema' 
    168190    SequenceType = nameSpace + 'sequence' 
    … …  
    173195        ) 
    174196    TokenType = nameSpace + 'token' 
     197    NameType = nameSpace + 'Name' 
     198    NCNameType = nameSpace + 'NCName' 
     199    QNameType = nameSpace + 'QName' 
     200    NameTypes = (NameType, NCNameType, QNameType, ) 
    175201    ListType = nameSpace + 'list' 
    176202    EnumerationType = nameSpace + 'enumeration' 
    177203    UnionType = nameSpace + 'union' 
     204    OtherSimpleTypes = ( 
     205        nameSpace + 'ENTITIES', 
     206        nameSpace + 'ENTITY', 
     207        nameSpace + 'ID', 
     208        nameSpace + 'IDREF', 
     209        nameSpace + 'IDREFS', 
     210        nameSpace + 'NCName', 
     211        nameSpace + 'NMTOKEN', 
     212        nameSpace + 'NMTOKENS', 
     213        nameSpace + 'NOTATION', 
     214        nameSpace + 'Name', 
     215        nameSpace + 'QName', 
     216        nameSpace + 'anyURI', 
     217        nameSpace + 'base64Binary', 
     218        nameSpace + 'boolean', 
     219        nameSpace + 'byte', 
     220        nameSpace + 'date', 
     221        nameSpace + 'dateTime', 
     222        nameSpace + 'decimal', 
     223        nameSpace + 'double', 
     224        nameSpace + 'duration', 
     225        nameSpace + 'float', 
     226        nameSpace + 'gDay', 
     227        nameSpace + 'gMonth', 
     228        nameSpace + 'gMonthDay', 
     229        nameSpace + 'gYear', 
     230        nameSpace + 'gYearMonth', 
     231        nameSpace + 'hexBinary', 
     232        nameSpace + 'int', 
     233        nameSpace + 'integer', 
     234        nameSpace + 'language', 
     235        nameSpace + 'long', 
     236        nameSpace + 'negativeInteger', 
     237        nameSpace + 'nonNegativeInteger', 
     238        nameSpace + 'nonPositiveInteger', 
     239        nameSpace + 'normalizedString', 
     240        nameSpace + 'positiveInteger', 
     241        nameSpace + 'short', 
     242        nameSpace + 'string', 
     243        nameSpace + 'time', 
     244        nameSpace + 'token', 
     245        nameSpace + 'unsignedByte', 
     246        nameSpace + 'unsignedInt', 
     247        nameSpace + 'unsignedLong', 
     248        nameSpace + 'unsignedShort', 
     249    ) 
    178250 
    179251 
    … …  
    253325            name_val = strip_namespace(self.attrs['name']) 
    254326        if 'type' in self.attrs: 
    255             type_val = self.attrs['type'] 
     327            if self.attrs['type'].startswith(XsdNameSpace): 
     328                type_val = self.attrs['type'] 
     329            else: 
     330                type_val = strip_namespace(self.attrs['type']) 
    256331        if 'ref' in self.attrs: 
    257332            ref_val = strip_namespace(self.attrs['ref']) 
    … …  
    268343        if ref_val: 
    269344            self.attrs['ref'] = ref_val 
     345        self.default = self.attrs.get('default') 
    270346        self.name = name_val 
    271347        self.children = [] 
    … …  
    353429    def setSimpleType(self, simpleType): self.simpleType = simpleType 
    354430    def getSimpleType(self): return self.simpleType.getName() 
     431    def setDefault(self, default): self.default = default 
     432    def getDefault(self): return self.default 
    355433 
    356434    def show(self, outfile, level): 
    … …  
    703781 
    704782class XschemaAttribute(object): 
    705     def __init__(self, name, data_type='xs:string', use='optional'): 
     783    def __init__(self, name, data_type='xs:string', use='optional', default=None): 
    706784        self.name = name 
    707785        self.data_type = data_type 
    708786        self.use = use 
     787        self.default = default 
    709788        # Enumeration values for the attribute. 
    710789        self.values = list() 
    … …  
    715794    def setUse(self, use): self.use = use 
    716795    def getUse(self): return self.use 
     796    def setDefault(self, default): self.default = default 
     797    def getDefault(self): return self.default 
    717798# end class XschemaAttribute 
    718799 
    … …  
    752833        print msg 
    753834        sys.exit(-1) 
    754          
    755     def findLastXschemaElement(self): 
    756         """ 
    757         Traverses the current stack of elements to find the first instance 
    758         of XschemaElement. 
    759         """ 
    760         element = None 
    761         reverse = list(self.stack) 
    762         reverse.reverse() 
    763         for entry in reverse: 
    764             if isinstance(entry, XschemaElement): 
    765                 element = entry 
    766         return element 
    767  
     835     
    768836    def startElement(self, name, attrs): 
     837        global Targetnamespace, NamespacesDict 
    769838        logging.debug("Start element: %s %s" % (name, repr(attrs.items()))) 
    770839        logging.debug("Stack: %s" % self.stack) 
    … …  
    780849            #   use that namespace prefix. 
    781850            for name, value in attrs.items(): 
    782                 if name[:6] == 'xmlns:' and \ 
    783                         value == 'http://www.w3.org/2001/XMLSchema': 
     851                if name[:6] == 'xmlns:': 
    784852                    nameSpace = name[6:] + ':' 
    785                     set_type_constants(nameSpace) 
     853                    if value == 'http://www.w3.org/2001/XMLSchema': 
     854                        set_type_constants(nameSpace) 
     855                    NamespacesDict[value] = nameSpace 
     856                elif name == 'targetNamespace': 
     857                    Targetnamespace = value 
     858 
    786859        elif name == ElementType or ((name == ComplexTypeType) and (len(self.stack) == 1)): 
    787860            self.inElement = 1 
    … …  
    832905            else: 
    833906                use = 'optional' 
     907            if 'default' in attrs.keys(): 
     908                default = attrs['default'] 
     909            else: 
     910                default = None 
    834911            if self.stack[-1].attributeGroup: 
    835912                # Add this attribute to a current attributeGroup. 
    836                 attribute = XschemaAttribute(name, data_type, use) 
     913                attribute = XschemaAttribute(name, data_type, use, default) 
    837914                self.stack[-1].attributeGroup.add(name, attribute) 
    838915            else: 
    839916                # Add this attribute to the element/complexType. 
    840                 attribute = XschemaAttribute(name, data_type, use) 
     917                attribute = XschemaAttribute(name, data_type, use, default) 
    841918                self.stack[-1].attributeDefs[name] = attribute 
    842919            self.lastAttribute = attribute 
    … …  
    863940                extensionBase = attrs['base'] 
    864941                if extensionBase in StringType or \ 
     942                    extensionBase in IDTypes or \ 
     943                    extensionBase in NameTypes or \ 
    865944                    extensionBase == TokenType or \ 
    866945                    extensionBase == DateTimeType or \ 
    … …  
    874953                    extensionBase == BooleanType or \ 
    875954                    extensionBase == FloatType or \ 
    876                     extensionBase == DoubleType: 
     955                    extensionBase == DoubleType or \ 
     956                    extensionBase in OtherSimpleTypes: 
    877957                    pass 
    878958                else: 
    … …  
    915995                # in the stack. We search backwards through the stack to 
    916996                # find the last element. 
    917                 element = self.findLastXschemaElement() 
     997                element = None 
     998                if self.stack: 
     999                    for entry in reversed(self.stack): 
     1000                        if isinstance(entry, XschemaElement): 
     1001                            element = entry 
    9181002                if element is None: 
    9191003                    sys.stderr.write( 
    … …  
    10221106# 
    10231107 
    1024 def generateExportFn_1(outfile, child, name, fill): 
     1108def generateExportFn_1(outfile, child, name, namespace, fill): 
    10251109    cleanName = cleanupName(name) 
    10261110    mappedName = mapName(cleanName) 
    … …  
    10311115        s1 = '%s        showIndent(outfile, level)\n' % fill 
    10321116        outfile.write(s1) 
    1033         s1 = "%s        outfile.write('<%s>%%s</%s>\\n' %% quote_xml(self.get%s()))\n" % \ 
    1034             (fill, name, name, make_gs_name(cleanName)) 
     1117        s1 = "%s        outfile.write('<%s%s>%%s</%s%s>\\n' %% quote_xml(self.get%s()))\n" % \ 
     1118            (fill, namespace, name, namespace, name, make_gs_name(cleanName)) 
    10351119        outfile.write(s1) 
    10361120    elif child.getType() in IntegerType or \ 
    … …  
    10421126        s1 = '%s        showIndent(outfile, level)\n' % fill 
    10431127        outfile.write(s1) 
    1044         s1 = "%s        outfile.write('<%s>%%d</%s>\\n' %% self.get%s())\n" % \ 
    1045             (fill, name, name, make_gs_name(cleanName)) 
     1128        s1 = "%s        outfile.write('<%s%s>%%d</%s%s>\\n' %% self.get%s())\n" % \ 
     1129            (fill, namespace, name, namespace, name, make_gs_name(cleanName)) 
    10461130        outfile.write(s1) 
    10471131    elif child.getType() == FloatType or \ 
    … …  
    10491133        s1 = '%s        showIndent(outfile, level)\n' % fill 
    10501134        outfile.write(s1) 
    1051         s1 = "%s        outfile.write('<%s>%%f</%s>\\n' %% self.get%s())\n" % \ 
    1052             (fill, name, name, make_gs_name(cleanName)) 
     1135        s1 = "%s        outfile.write('<%s%s>%%f</%s%s>\\n' %% self.get%s())\n" % \ 
     1136            (fill, namespace, name, namespace, name, make_gs_name(cleanName)) 
    10531137        outfile.write(s1) 
    10541138    elif child.getType() == DoubleType: 
    10551139        s1 = '%s        showIndent(outfile, level)\n' % fill 
    10561140        outfile.write(s1) 
    1057         s1 = "%s        outfile.write('<%s>%%e</%s>\\n' %% self.get%s())\n" % \ 
    1058             (fill, name, name, make_gs_name(cleanName)) 
     1141        s1 = "%s        outfile.write('<%s%s>%%e</%s%s>\\n' %% self.get%s())\n" % \ 
     1142            (fill, namespace, name, namespace, name, make_gs_name(cleanName)) 
    10591143        outfile.write(s1) 
    10601144    else: 
    … …  
    10651149                (fill, mappedName) 
    10661150        else: 
    1067             s1 = "%s            self.%s.export(outfile, level, name_='%s')\n" % \ 
    1068                 (fill, mappedName, name) 
    1069         outfile.write(s1) 
    1070  
    1071  
    1072 def generateExportFn_2(outfile, child, name, fill): 
     1151            s1 = "%s            self.%s.export(outfile, level, name_='%s', namespace_='%s')\n" % \ 
     1152                (fill, mappedName, name, namespace) 
     1153        outfile.write(s1) 
     1154 
     1155 
     1156def generateExportFn_2(outfile, child, name, namespace, fill): 
    10731157    cleanName = cleanupName(name) 
    10741158    mappedName = mapName(cleanName) 
    … …  
    10811165        s1 = '%s        showIndent(outfile, level)\n' % fill 
    10821166        outfile.write(s1) 
    1083         s1 = "%s        outfile.write('<%s>%%s</%s>\\n' %% quote_xml(%s_))\n" % \ 
    1084             (fill, name, name, cleanName,) 
     1167        s1 = "%s        outfile.write('<%s%s>%%s</%s%s>\\n' %% quote_xml(%s_))\n" % \ 
     1168            (fill, namespace, name, namespace, name, cleanName,) 
    10851169        outfile.write(s1) 
    10861170    elif child.getType() in IntegerType or \ 
    … …  
    10921176        s1 = '%s        showIndent(outfile, level)\n' % fill 
    10931177        outfile.write(s1) 
    1094         s1 = "%s        outfile.write('<%s>%%d</%s>\\n' %% %s_)\n" % \ 
    1095             (fill, name, name, cleanName, ) 
     1178        s1 = "%s        outfile.write('<%s%s>%%d</%s%s>\\n' %% %s_)\n" % \ 
     1179            (fill, namespace, name, namespace, name, cleanName, ) 
    10961180        outfile.write(s1) 
    10971181    elif child.getType() == FloatType or \ 
    … …  
    10991183        s1 = '%s        showIndent(outfile, level)\n' % fill 
    11001184        outfile.write(s1) 
    1101         s1 = "%s        outfile.write('<%s>%%f</%s>\\n' %% %s_)\n" % \ 
    1102             (fill, name, name, cleanName, ) 
     1185        s1 = "%s        outfile.write('<%s%s>%%f</%s%s>\\n' %% %s_)\n" % \ 
     1186            (fill, namespace, name, namespace, name, cleanName, ) 
    11031187        outfile.write(s1) 
    11041188    elif child.getType() == DoubleType: 
    11051189        s1 = '%s        showIndent(outfile, level)\n' % fill 
    11061190        outfile.write(s1) 
    1107         s1 = "%s        outfile.write('<%s>%%e</%s>\\n' %% %s_)\n" % \ 
    1108             (fill, name, name, cleanName) 
     1191        s1 = "%s        outfile.write('<%s%s>%%e</%s%s>\\n' %% %s_)\n" % \ 
     1192            (fill, namespace, name, namespace, name, cleanName) 
    11091193        outfile.write(s1) 
    11101194    else: 
    … …  
    11121196            s1 = "%s        %s_.export(outfile, level)\n" % (fill, mappedName) 
    11131197        else: 
    1114             s1 = "%s        %s_.export(outfile, level, name_='%s')\n" % \ 
    1115                 (fill, mappedName, cleanName, ) 
    1116         outfile.write(s1) 
    1117  
    1118  
    1119 def generateExportFn_3(outfile, child, name, fill): 
     1198            s1 = "%s        %s_.export(outfile, level, name_='%s', namespace_='%s')\n" % \ 
     1199                (fill, mappedName, cleanName, namespace) 
     1200        outfile.write(s1) 
     1201 
     1202 
     1203def generateExportFn_3(outfile, child, name, namespace, fill): 
    11201204    cleanName = cleanupName(name) 
    11211205    mappedName = mapName(cleanName) 
    … …  
    11271211        child.getType() == DateTimeType or \ 
    11281212        child.getType() == DateType: 
    1129         s1 = '%s            showIndent(outfile, level)\n' % fill 
    1130         outfile.write(s1) 
    1131         s1 = "%s            outfile.write('<%s>%%s</%s>\\n' %% quote_xml(self.get%s()))\n" % \ 
    1132             (fill, name, name, make_gs_name(cleanName)) 
     1213        s1 = '%s            if self.get%s() != "" :\n' % ( 
     1214            fill, make_gs_name(cleanName)) 
     1215        outfile.write(s1) 
     1216        s1 = '%s                showIndent(outfile, level)\n' % fill 
     1217        outfile.write(s1) 
     1218        s1 = "%s                outfile.write('<%s%s>%%s</%s%s>\\n' %% quote_xml(self.get%s()))\n" % \ 
     1219            (fill, namespace, name, namespace, name, make_gs_name(cleanName)) 
    11331220        outfile.write(s1) 
    11341221    elif child.getType() in IntegerType or \ 
    … …  
    11401227        s1 = '%s            showIndent(outfile, level)\n' % fill 
    11411228        outfile.write(s1) 
    1142         s1 = "%s            outfile.write('<%s>%%d</%s>\\n' %% self.get%s())\n" % \ 
    1143             (fill, name, name, make_gs_name(cleanName)) 
     1229        s1 = "%s            outfile.write('<%s%s>%%d</%s%s>\\n' %% self.get%s())\n" % \ 
     1230            (fill, namespace, name, namespace, name, make_gs_name(cleanName)) 
    11441231        outfile.write(s1) 
    11451232    elif child.getType() == FloatType or \ 
    … …  
    11471234        s1 = '%s            showIndent(outfile, level)\n' % fill 
    11481235        outfile.write(s1) 
    1149         s1 = "%s            outfile.write('<%s>%%f</%s>\\n' %% self.get%s())\n" % \ 
    1150             (fill, name, name, make_gs_name(cleanName)) 
     1236        s1 = "%s            outfile.write('<%s%s>%%f</%s%s>\\n' %% self.get%s())\n" % \ 
     1237            (fill, namespace, name, namespace, name, make_gs_name(cleanName)) 
    11511238        outfile.write(s1) 
    11521239    elif child.getType() == DoubleType: 
    11531240        s1 = '%s            showIndent(outfile, level)\n' % fill 
    11541241        outfile.write(s1) 
    1155         s1 = "%s            outfile.write('<%s>%%e</%s>\\n' %% self.get%s())\n" % \ 
    1156             (fill, name, name, make_gs_name(cleanName)) 
     1242        s1 = "%s            outfile.write('<%s%s>%%e</%s%s>\\n' %% self.get%s())\n" % \ 
     1243            (fill, namespace, name, namespace, name, make_gs_name(cleanName)) 
    11571244        outfile.write(s1) 
    11581245    else: 
    … …  
    11631250                (fill, mappedName) 
    11641251        else: 
    1165             s1 = "%s                self.%s.export(outfile, level, name_='%s')\n" % \ 
    1166                 (fill, mappedName, name) 
     1252            s1 = "%s                self.%s.export(outfile, level, name_='%s', namespace_='%s')\n" % \ 
     1253                (fill, mappedName, name, namespace) 
    11671254        outfile.write(s1) 
    11681255 
    … …  
    11801267                s1 = "        if self.get%s() is not None:\n" % (capName, ) 
    11811268                outfile.write(s1) 
    1182                 s1 = "            outfile.write(' %s=\"%%s\"' %% (self.get%s(), ))\n" % \ 
     1269                s1 = "            outfile.write(' %s=\"%%s\"' %% (quote_attrib(self.get%s()), ))\n" % \ 
    11831270                    (name, capName, ) 
    11841271                outfile.write(s1) 
    11851272            else: 
    1186                 s1 = "        outfile.write(' %s=\"%%s\"' %% (self.get%s(), ))\n" % \ 
     1273                s1 = "        outfile.write(' %s=\"%%s\"' %% (quote_attrib(self.get%s()), ))\n" % \ 
    11871274                    (name, capName, ) 
    11881275                outfile.write(s1) 
    … …  
    11901277        s1 = '        for name, value in self.anyAttributes_.items():\n' 
    11911278        outfile.write(s1) 
    1192         s1 = "            outfile.write(' %s=\"%s\"' % (name, value, ))\n" 
     1279        s1 = "            outfile.write(' %s=\"%s\"' % (name, quote_attrib(value), ))\n" 
    11931280        outfile.write(s1) 
    11941281    return hasAttributes 
    11951282 
    11961283 
    1197 def generateExportChildren(outfile, element, hasChildren): 
     1284def generateExportChildren(outfile, element, hasChildren, namespace): 
    11981285    if len(element.getChildren()) > 0: 
    11991286        hasChildren += 1 
    … …  
    12011288            s1 = "        for item_ in self.content_:\n" 
    12021289            outfile.write(s1) 
    1203             s1 = "            item_.export(outfile, level, name_)\n" 
     1290            s1 = "            item_.export(outfile, level, name_, namespace_)\n" 
    12041291            outfile.write(s1) 
    12051292        else: 
    … …  
    12071294                name = child.getName() 
    12081295                if child.getMaxOccurs() > 1: 
    1209                     generateExportFn_2(outfile, child, name, '    ') 
     1296                    generateExportFn_2(outfile, child, name, namespace, '    ') 
    12101297                else: 
    12111298                    if (child.getOptional()): 
    1212                         generateExportFn_3(outfile, child, name, '') 
     1299                        generateExportFn_3(outfile, child, name, namespace, '') 
    12131300                    else: 
    1214                         generateExportFn_1(outfile, child, name, '') 
     1301                        generateExportFn_1(outfile, child, name, namespace, '') 
    12151302##    base = element.getBase() 
    12161303##    if base and base in ElementDict: 
    … …  
    12291316 
    12301317 
    1231 def generateExportFn(outfile, prefix, element): 
     1318def generateExportFn(outfile, prefix, element, namespace): 
    12321319    childCount = countChildren(element, 0) 
    12331320    base = element.getBase() 
    1234     s1 = "    def export(self, outfile, level, name_='%s'):\n" % \ 
    1235         element.getName() 
     1321    s1 = "    def export(self, outfile, level, name_='%s', namespace_='%s'):\n" % \ 
     1322        (element.getName(), namespace) 
    12361323    outfile.write(s1) 
    12371324    s1 = '        showIndent(outfile, level)\n' 
    12381325    outfile.write(s1) 
    12391326    if len(element.getAttributeDefs()) > 0 or element.getAnyAttribute(): 
    1240         s1 = "        outfile.write('<%s' % (name_, ))\n" 
    1241         outfile.write(s1) 
    1242  
    1243         s1 = "        self.exportAttributes(outfile, level, name_='%s')\n" % \ 
    1244             element.getName() 
     1327        s1 = "        outfile.write('<%s%s' % (namespace_, name_))\n" 
     1328        outfile.write(s1) 
     1329 
     1330        s1 = "        self.exportAttributes(outfile, level, name_='%s', namespace_='%s')\n" % \ 
     1331            (element.getName(), namespace) 
    12451332        outfile.write(s1) 
    12461333        if element.isMixed() or childCount == 0: 
    … …  
    12511338    else: 
    12521339        if element.isMixed() or childCount == 0: 
    1253             s1 = "        outfile.write('<%s>' % name_)\n" 
    1254         else: 
    1255             s1 = "        outfile.write('<%s>\\n' % name_)\n" 
    1256         outfile.write(s1) 
    1257  
    1258     s1 = "        self.exportChildren(outfile, level + 1, name_)\n" 
     1340            s1 = "        outfile.write('<%s%s>' % (namespace_, name_))\n" 
     1341        else: 
     1342            s1 = "        outfile.write('<%s%s>\\n' % (namespace_, name_))\n" 
     1343        outfile.write(s1) 
     1344 
     1345    s1 = "        self.exportChildren(outfile, level + 1, name_, namespace_)\n" 
    12591346    outfile.write(s1) 
    12601347    if element.isMixed() or childCount == 0: 
    1261         s1 = "        outfile.write('</%s>\\n' % name_)\n" 
     1348        s1 = "        outfile.write('</%s%s>\\n' % (namespace_, name_))\n" 
    12621349        outfile.write(s1) 
    12631350    else: 
    12641351        s1 = '        showIndent(outfile, level)\n' 
    12651352        outfile.write(s1) 
    1266         s1 = "        outfile.write('</%s>\\n' % name_)\n" 
    1267         outfile.write(s1) 
    1268     s1 = "    def exportAttributes(self, outfile, level, name_='%s'):\n" % \ 
    1269         element.getName() 
     1353        s1 = "        outfile.write('</%s%s>\\n' % (namespace_, name_))\n" 
     1354        outfile.write(s1) 
     1355    s1 = "    def exportAttributes(self, outfile, level, name_='%s', namespace_='%s'):\n" % \ 
     1356        (element.getName(), namespace) 
    12701357    outfile.write(s1) 
    12711358    hasAttributes = 0 
    … …  
    12731360    if base and base not in SimpleTypeDict: 
    12741361        hasAttributes += 1 
    1275         s1 = "        %s.exportAttributes(self, outfile, level, name_='%s')\n" % \ 
    1276             (base, element.getName(), ) 
     1362        s1 = "        %s.exportAttributes(self, outfile, level, name_='%s', namespace_='%s')\n" % \ 
     1363            (base, element.getName(), namespace) 
    12771364        outfile.write(s1) 
    12781365    if hasAttributes == 0: 
    … …  
    12821369##        s1 = '        showIndent(outfile, level)\n' 
    12831370##        outfile.write(s1) 
    1284     s1 = "    def exportChildren(self, outfile, level, name_='%s'):\n" % \ 
    1285         element.getName() 
     1371    s1 = "    def exportChildren(self, outfile, level, name_='%s', namespace_='%s'):\n" % \ 
     1372        (element.getName(), namespace) 
    12861373    outfile.write(s1) 
    12871374    hasChildren = 0 
    1288     hasChildren = generateExportChildren(outfile, element, hasChildren) 
     1375    hasChildren = generateExportChildren(outfile, element, hasChildren, namespace) 
    12891376    if base and base not in SimpleTypeDict: 
    12901377        hasChildren += 1 
    1291         s1 = "        %s.exportChildren(self, outfile, level, name_)\n" % (base, ) 
     1378        s1 = "        %s.exportChildren(self, outfile, level, name_, namespace_)\n" % (base, ) 
    12921379        outfile.write(s1) 
    12931380    if childCount == 0: 
    1294         s1 = "        outfile.write(self.valueOf_)\n" 
     1381        s1 = "        outfile.write(quote_xml(self.valueOf_))\n" 
    12951382        outfile.write(s1) 
    12961383# end generateExportFn 
    … … Â