code: private MessageML parseMessageML(String messageML, String version) throws InvalidInputException, ProcessingException {
      validateMessageText(messageML);
  
      org.w3c.dom.Element docElement = parseDocument(messageML);
  
      validateEntities(docElement, entityJson);
  
      switch (docElement.getTagName()) {
        case MessageML.MESSAGEML_TAG:
          this.messageFormat = FormatEnum.MESSAGEML;
          if (StringUtils.isBlank(version)) {
            version = MessageML.MESSAGEML_VERSION;
          }
          break;
  
        case MessageML.PRESENTATIONML_TAG:
          this.messageFormat = FormatEnum.PRESENTATIONML;
          break;
  
        default:
          throw new InvalidInputException("Root tag must be <" + MessageML.MESSAGEML_TAG + ">"
              + " or <" + MessageML.PRESENTATIONML_TAG + ">");
      }
  
      MessageML result = new MessageML(messageFormat, version);
      result.buildAll(this, docElement);
      result.validate();
  
      return result;
    }
docs: Parse the message string into its MessageML representation.