예제 #1
0
def importXml(self, xml, createIfNotExists=1):
    if not isinstance(xml, str):
        xml = xml.read()
    value = standard.parseXmlString(xml)
    if value is None:
        value = []
        builder = _xmllib.XmlBuilder()
        nWorkbook = builder.parse(xml)
        for nWorksheet in _xmllib.xmlNodeSet(nWorkbook, 'Worksheet'):
            for nTable in _xmllib.xmlNodeSet(nWorksheet, 'Table'):
                r = 0
                keys = []
                for nRow in _xmllib.xmlNodeSet(nTable, 'Row'):
                    c = 0
                    for nCell in _xmllib.xmlNodeSet(nRow, 'Cell'):
                        for nData in _xmllib.xmlNodeSet(nCell, 'Data'):
                            if r == 0:
                                if c == 0:
                                    key = 'key'
                                else:
                                    key = nData.get('cdata', '')
                                keys.append(key)
                            else:
                                if c == 0:
                                    value.append({})
                                value[-1][keys[c]] = nData.get('cdata', '')
                            c += 1
                    r += 1
    if isinstance(value, list):
        for item in value:
            _importXml(self, item, createIfNotExists)
    else:
        _importXml(self, value, createIfNotExists)
예제 #2
0
 def __init__(self, filename='_language.xml'):
     """
   Constructor 
   """
     manage_langs = []
     lang_dict = {}
     filepath = package_home(globals()) + '/import/'
     xmlfile = open(_fileutil.getOSPath(filepath + filename), 'rb')
     builder = _xmllib.XmlBuilder()
     nWorkbook = builder.parse(xmlfile)
     for nWorksheet in _xmllib.xmlNodeSet(nWorkbook, 'Worksheet'):
         for nTable in _xmllib.xmlNodeSet(nWorksheet, 'Table'):
             for nRow in _xmllib.xmlNodeSet(nTable, 'Row'):
                 lRow = []
                 currIndex = 0
                 for nCell in _xmllib.xmlNodeSet(nRow, 'Cell'):
                     ssIndex = int(
                         nCell.get('attrs', {}).get('ss:Index',
                                                    currIndex + 1))
                     currData = None
                     for i in range(currIndex + 1, ssIndex):
                         lRow.append(currData)
                     for nData in _xmllib.xmlNodeSet(nCell, 'Data'):
                         currData = nData['cdata']
                     lRow.append(currData)
                     currIndex = ssIndex
                 if len(manage_langs) == 0:
                     del lRow[0]
                     manage_langs = lRow
                 else:
                     if len(lRow) > 0:
                         key = lRow[0]
                         value = {}
                         for i in range(len(manage_langs)):
                             if i + 1 < len(lRow):
                                 if lRow[i + 1] is not None:
                                     value[manage_langs[i]] = lRow[i + 1]
                         lang_dict[key] = value
     xmlfile.close()
     self.manage_langs = manage_langs
     self.langdict = lang_dict