docs: def parse_xml_node(self, node):
          '''Parse an xml.dom Node object representing a component into this
          object.
  
          >>> c = Component()
          '''
          self._reset()
          # Get the attributes
          self.id = node.getAttributeNS(RTS_NS, 'id')
          self.path_uri = node.getAttributeNS(RTS_NS, 'pathUri')
          if node.hasAttributeNS(RTS_NS, 'activeConfigurationSet'):
              self.active_configuration_set = node.getAttributeNS(RTS_NS,
                      'activeConfigurationSet')
          else:
              self.active_configuration_set = ''
          self.instance_name = node.getAttributeNS(RTS_NS, 'instanceName')
          self.compositeType = comp_type.from_string(node.getAttributeNS(RTS_NS,
                  'compositeType'))
          required = node.getAttributeNS(RTS_NS, 'isRequired')
          if required == 'true' or required == '1':
              self.is_required = True
          else:
              self.is_required = False
          self.comment = node.getAttributeNS(RTS_EXT_NS, 'comment')
          if node.hasAttributeNS(RTS_EXT_NS, 'visible'):
              visible = node.getAttributeNS(RTS_EXT_NS, 'visible')
              if visible.lower() == 'true' or visible == '1':
                  self.visible = True
              else:
                  self.visible = False
  
          # Get the children
          for c in node.getElementsByTagNameNS(RTS_NS, 'DataPorts'):
              self._data_ports.append(DataPort().parse_xml_node(c))
          for c in node.getElementsByTagNameNS(RTS_NS, 'ServicePorts'):
              self._service_ports.append(ServicePort().parse_xml_node(c))
          for c in node.getElementsByTagNameNS(RTS_NS, 'ConfigurationSets'):
              self._config_sets.append(ConfigurationSet().parse_xml_node(c))
          for c in node.getElementsByTagNameNS(RTS_NS, 'ExecutionContexts'):
              self._exec_contexts.append(ExecutionContext().parse_xml_node(c))
          for c in node.getElementsByTagNameNS(RTS_NS, 'Participants'):
              self._participants.append(Participant().parse_xml_node(c))
          # Extended profile children
          c = node.getElementsByTagNameNS(RTS_EXT_NS, 'Location')
          if c.length > 0:
              if c.length > 1:
                  raise InvalidRtsProfileNodeError('Location')
              self._location = Location().parse_xml_node(c[0])
          for c in get_direct_child_elements_xml(node, prefix=RTS_EXT_NS,
                                                 local_name='Properties'):
              name, value = parse_properties_xml(c)
              self._properties[name] = value
  
          return self