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)
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