public XMLElement createXMLElement(Node node, Map<String, String> propertiesData) {
		
		if (node == null || propertiesData == null) return null;
		
		XMLElement result = new XMLElement();
		String address = getAddress(node);
		result.setAddress(address);
		
		// add additional information to the element from properties file
		String temp = propertiesData.get(address);
		if (temp != null) {
			String[] temp2 = temp.split("#");
			result.setName(temp2[2]);
			if (temp2.length == 4) {
				result.setHint(temp2[3]);
			} else {
				result.setHint(null);
			}
		}
		
		// attributes
		NamedNodeMap attributes = node.getAttributes();
		for (int i = 0; i < attributes.getLength(); i++) {
			
			String name = attributes.item(i).getNodeName();
			String value = attributes.item(i).getNodeValue();			
			
			// add additional information to the attributes from properties file
			String additionalData = propertiesData.get(address.concat("/").concat(name));
			String[] addDataArray = additionalData.split("#");			
			boolean required = false;
			if (addDataArray[2].equals("R")) {
				required = true;
			}
			List<String> allowedValues = new ArrayList<String>();
			String[] allValues = addDataArray[3].split(",");
			if (!allValues[0].equals("")) {
				for (int j = 0; j < allValues.length; j++) {
					allowedValues.add(allValues[j]);
				}
			}
			
			XMLAttribute attr;			
			
			// could be without 'hint'
			if (addDataArray.length <= 6) {
				attr = new XMLAttribute(addDataArray[1], required, allowedValues, value, addDataArray[5], null, name);
			} else {
				attr = new XMLAttribute(addDataArray[1], required, allowedValues, value, addDataArray[5], addDataArray[6], name);
			}
			result.addAttribute(attr);
		}
		
		return result;
	}