docs: @Pure
  	public static <T extends Enum<T>> T getAttributeEnumWithDefault(Node document, Class<T> type,
  			boolean caseSensitive, T defaultValue, String... path) {
  		assert document != null : AssertMessages.notNullParameter(0);
  		assert type != null : AssertMessages.notNullParameter(1);
  		final String v = getAttributeValue(document, caseSensitive, 0, path);
  		if (v != null && !v.isEmpty()) {
  			if (caseSensitive) {
  				try {
  					final T value = Enum.valueOf(type, v);
  					if (value != null) {
  						return value;
  					}
  				} catch (Throwable e) {
  					//
  				}
  			} else {
  				for (final T value : type.getEnumConstants()) {
  					if (v.equalsIgnoreCase(value.name())) {
  						return value;
  					}
  				}
  			}
  		}
  		return defaultValue;
  	}