/**
   * For the specified Interpreter type node, parse all subordinate Interpreter definitions and add
   * them to the specified container.
   */
  private void populateValidatorType(Element validatorTypeElement) {

    // Retrieve the 'id' attribute and the corresponding Interpreter type
    // object
    String id = validatorTypeElement.getAttribute(ATTR_ID);
    IValidatorType validatorType = ValidatorManager.getValidatorTypeFromID(id);
    if (validatorType != null) {

      // For each validator child node, populate the container with a
      // subordinate node
      NodeList validatorNodeList = validatorTypeElement.getChildNodes();
      for (int i = 0; i < validatorNodeList.getLength(); ++i) {
        Node childNode = validatorNodeList.item(i);
        short type = childNode.getNodeType();
        if (type == Node.ELEMENT_NODE) {
          Element validatorElement = (Element) childNode;
          if (validatorElement.getNodeName().equalsIgnoreCase(NODE_VALIDATOR)) {
            populateValidator(validatorType, validatorElement);
          }
        }
      }
    } else {
      final String msg = ValidatorMessages.ValidatorDefinitionsContainer_unknownValidatorType;
      ValidatorsCore.warn(NLS.bind(msg, id));
    }
  }