diff --git a/src/pyreqif/rif.py b/src/pyreqif/rif.py index 440989e..9c04250 100644 --- a/src/pyreqif/rif.py +++ b/src/pyreqif/rif.py @@ -45,22 +45,31 @@ def pretty(d, indent=0): mapReqifAttributeValue = {"default": "embeddedDoc", "ATTRIBUTE-VALUE-EMBEDDED-DOCUMENT": "embeddedDoc", "ATTRIBUTE-VALUE-STRING": "string", + "ATTRIBUTE-VALUE-DATE": "string", + "ATTRIBUTE-VALUE-SIMPLE": "embeddedDoc", "ATTRIBUTE-VALUE-XHTML": "embeddedDoc", "ATTRIBUTE-VALUE-BOOLEAN": "embeddedDoc", + "ATTRIBUTE-VALUE-REAL": "embeddedDoc", "ATTRIBUTE-VALUE-INTEGER": "embeddedDoc"} mapReqifAttributeDefinition = {"default": "complex", "ATTRIBUTE-DEFINITION-COMPLEX": "complex", "ATTRIBUTE-DEFINITION-STRING": "string", + "ATTRIBUTE-DEFINITION-DATE": "string", + "ATTRIBUTE-DEFINITION-SIMPLE": "complex", "ATTRIBUTE-DEFINITION-XHTML": "complex", "ATTRIBUTE-DEFINITION-BOOLEAN": "complex", + "ATTRIBUTE-DEFINITION-REAL": "complex", "ATTRIBUTE-DEFINITION-INTEGER": "complex"} mapReqifDatatypeDefinition = {"default": "document", "DATATYPE-DEFINITION-DOCUMENT": "document", "DATATYPE-DEFINITION-STRING": "string", + "DATATYPE-DEFINITION-DATE": "string", + "DATATYPE-DEFINITION-SIMPLE": "document", "DATATYPE-DEFINITION-XHTML": "document", "DATATYPE-DEFINITION-BOOLEAN": "document", + "DATATYPE-DEFINITION-REAL": "document", "DATATYPE-DEFINITION-INTEGER": "document"} transLationTableReverse = dict(map(reversed, transLationTable.items())) @@ -187,8 +196,9 @@ def getSubElementValuesByTitle(xmlElement, tagNameArray=[]): datatypesXmlElement = contentRoot.find('./' + ns + 'DATATYPES') for child in datatypesXmlElement: - if child.tag == ns + "DATATYPE-DEFINITION-DOCUMENT" or child.tag == ns + 'DATATYPE-DEFINITION-STRING' or child.tag == ns + 'DATATYPE-DEFINITION-XHTML' \ - or child.tag == ns + 'DATATYPE-DEFINITION-BOOLEAN' or child.tag == ns + "DATATYPE-DEFINITION-INTEGER": + if child.tag == ns + "DATATYPE-DEFINITION-DOCUMENT" or child.tag == ns + 'DATATYPE-DEFINITION-STRING' or child.tag == ns + 'DATATYPE-DEFINITION-XHTML'\ + or child.tag == ns + 'DATATYPE-DEFINITION-BOOLEAN' or child.tag == ns + "DATATYPE-DEFINITION-INTEGER" or child.tag == ns + "DATATYPE-DEFINITION-DATE"\ + or child.tag == ns + 'DATATYPE-DEFINITION-REAL' or child.tag == ns + 'DATATYPE-DEFINITION-SIMPLE': datatypeProto = getSubElementValuesByTitle(child, ['EMBEDDED']) tagWithoutNamespace = re.sub('{[\S]*}', '', child.tag) datatypeProto['type'] = mapReqifDatatypeDefinition2Py(tagWithoutNamespace) @@ -209,11 +219,6 @@ def getSubElementValuesByTitle(xmlElement, tagNameArray=[]): datatypeProto['values'] = values doc.addDatatype(reqif2py(datatypeProto)) else: - # missing: - # DATATYPE-DEFINITION-BOOLEAN - # DATATYPE-DEFINITION-DATE - # DATATYPE-DEFINITION-INTEGER - # DATATYPE-DEFINITION-REAL print("Not supported datatype: ", ) print(child.tag) @@ -225,8 +230,10 @@ def getSubElementValuesByTitle(xmlElement, tagNameArray=[]): attributesXml = child.find('./' + ns + "SPEC-ATTRIBUTES") if attributesXml is not None: for attribute in attributesXml: - if attribute.tag == ns + "ATTRIBUTE-DEFINITION-COMPLEX" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-STRING" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-XHTML" \ - or attribute.tag == ns + "ATTRIBUTE-DEFINITION-BOOLEAN" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-INTEGER": + if attribute.tag == ns +"ATTRIBUTE-DEFINITION-COMPLEX" or attribute.tag == ns +"ATTRIBUTE-DEFINITION-STRING" or attribute.tag == ns +"ATTRIBUTE-DEFINITION-XHTML"\ + or attribute.tag == ns + "ATTRIBUTE-DEFINITION-BOOLEAN" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-INTEGER"\ + or attribute.tag == ns + "ATTRIBUTE-VALUE-DATE" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-DATE"\ + or attribute.tag == ns + "ATTRIBUTE-DEFINITION-REAL" or attribute.tag == ns + "ATTRIBUTE-DEFINITION-SIMPLE": specAttribType = getSubElementValuesByTitle(attribute) tagWithoutNamespace = re.sub('{[\S]*}', '', attribute.tag) specAttribType["type"] = mapReqifAttributeDefinition2Py(tagWithoutNamespace) @@ -310,9 +317,10 @@ def remove_namespaces(thedoc): values = {} for valueXml in valuesXml: value = getSubElementValuesByTitle(valueXml) - # TODO : Support other types - if valueXml.tag == ns + 'ATTRIBUTE-VALUE-EMBEDDED-DOCUMENT' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-STRING' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-XHTML' \ - or valueXml.tag == ns + 'ATTRIBUTE-VALUE-BOOLEAN' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-INTEGER': + #TODO : Support other types + if valueXml.tag == ns + 'ATTRIBUTE-VALUE-EMBEDDED-DOCUMENT' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-STRING' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-XHTML'\ + or valueXml.tag == ns + 'ATTRIBUTE-VALUE-BOOLEAN' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-INTEGER' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-DATE'\ + or valueXml.tag == ns + 'ATTRIBUTE-VALUE-REAL' or valueXml.tag == ns + 'ATTRIBUTE-VALUE-SIMPLE': attributeRefXml = valueXml.find('./' + ns + 'DEFINITION').getchildren()[0] value['attributeRef'] = attributeRefXml.text if 'THE-VALUE' in valueXml.attrib: @@ -322,7 +330,11 @@ def remove_namespaces(thedoc): './' + ns + 'XHTML-CONTENT/{http://automotive-his.de/200706/rif-xhtml}div') if contentXml is None: contentXml = valueXml.find("./" + ns + 'THE-VALUE/{http://www.w3.org/1999/xhtml}div') - + if contentXml is None: + contentXml = valueXml.find( + "./" + ns + 'THE-VALUE' + ) + value["content"] = etree.tostring(remove_namespaces(contentXml)) # value["content"] = "".join(contentXml.itertext()) diff --git a/xlsx2reqif.py b/xlsx2reqif.py index a099c45..45d7993 100644 --- a/xlsx2reqif.py +++ b/xlsx2reqif.py @@ -108,7 +108,7 @@ def get_images(images, row, col): last_hierarch_element = myHierarch for row_nr in range(2, ws.max_row+1): xls_req = dict(zip(columns, [ws.cell(row_nr, x).value for x in range(1, ws.max_column + 1)])) - if not "reqifId" in xls_req: + if "reqifId" not in xls_req: xls_req["reqifId"] = pyreqif.create.creatUUID() for col in columns: # do images: