docs: def _processServiceList(self, serviceList, baseURIPath):
          """Internal method to iterate in the device definition XML tree through the service list.
  
          :param serviceList: the XML root node of a service list
          :type serviceList: xml.etree.ElementTree.Element
          """
  
          # iterate through all children in serviceList XML tag
          for service in serviceList.getchildren():
  
              # has to be a service
              if not service.tag.lower().endswith("service"):
                  raise ValueError("Non service tag in servicelist: " + service.tag)
  
              serviceType = None
              controlURL = None
              scpdURL = None
              eventURL = None
  
              # go through all the tags of a service and remember the values, ignore unknowns
              for child in service:
                  tag = child.tag.lower()
  
                  if tag.endswith("servicetype") or (serviceType is None and tag.endswith("spectype")):
                      serviceType = child.text
                  elif tag.endswith("controlurl"):
                      controlURL = str(child.text)
  
                      # if the url does not start with / (relative) or with a protocol add the base path
                      if not controlURL.startswith("/") and not controlURL.startswith("http"):
                          controlURL = baseURIPath + controlURL
  
                  elif tag.endswith("scpdurl"):
  
                      scpdURL = str(child.text)
  
                      # if the url does not start with / (relative) or with a protocol add the base path
                      if not scpdURL.startswith("/") and not scpdURL.startswith("http"):
                          scpdURL = baseURIPath + scpdURL
  
                  elif tag.endswith("eventsuburl"):
  
                      eventURL = str(child.text)
  
                      # if the url does not start with / (relative) or with a protocol add the base path
                      if not eventURL.startswith("/") and not eventURL.startswith("http"):
                          eventURL = baseURIPath + eventURL
  
              # check if serviceType and the URL's have been found
              if serviceType is None or controlURL is None:
                  raise ValueError("Service is not complete: " + str(serviceType) + " - " +
                                   str(controlURL) + " - " + str(scpdURL))
  
              # no service should be defined twice otherwise the old one will be overwritten
              if serviceType in self.__deviceServiceDefinitions.keys():
                  raise ValueError("Service type '" + serviceType + "' is defined twice.")
  
              self.__deviceServiceDefinitions[serviceType] = {"controlURL": controlURL}
  
              # if the scpd url is defined add it
              if scpdURL is not None:
                  self.__deviceServiceDefinitions[serviceType]["scpdURL"] = scpdURL
  
              # if event url is given we add it as well
              if eventURL is not None:
                  self.__deviceServiceDefinitions[serviceType]["eventSubURL"] = eventURL