src/main/java/org/jboss/pressgang/ccms/model/utils/TopicUtilities.java
public static Map<Integer, Integer> getMinHashes(final String xml, final List<MinHashXOR> minHashXORs) {
        final Map<Integer, Integer> retValue = new HashMap<Integer, Integer>();

        // Clean the XML to remove element names and other useless data
        final String cleanedXML = cleanXMLForMinHash(xml);

        // the first minhash uses the builtin hashcode only
        final Integer baseMinHash = getMinHashInternal(cleanedXML, null);
        if (baseMinHash != null) {
            retValue.put(0, baseMinHash);
        }

        for (int funcId = 1; funcId < org.jboss.pressgang.ccms.model.constants.Constants.NUM_MIN_HASHES; ++funcId) {
            boolean foundMinHash = false;
            for (final MinHashXOR minHashXOR : minHashXORs) {
                if (minHashXOR.getMinHashXORFuncId() == funcId) {
                    final Integer minHash = getMinHashInternal(cleanedXML, minHashXOR.getMinHashXOR());
                    if (minHash != null) {
                        retValue.put(funcId, minHash);
                    }
                    foundMinHash = true;
                    break;
                }
            }
            if (!foundMinHash) {
                throw new IllegalStateException("Did not find a minhash xor int for function " + funcId);
            }
        }

        return retValue;
    }
public static Map<Integer, Integer> getMinHashes(final String xml, final List<MinHashXOR> minHashXORs) {
        final Map<Integer, Integer> retValue = new HashMap<Integer, Integer>();

        // Clean the XML to remove element names and other useless data
        final String cleanedXML = cleanXMLForMinHash(xml);

        // the first minhash uses the builtin hashcode only
        final Integer baseMinHash = getMinHashInternal(cleanedXML, null);
        if (baseMinHash != null) {
            retValue.put(0, baseMinHash);
        }

        for (int funcId = 1; funcId < org.jboss.pressgang.ccms.model.constants.Constants.NUM_MIN_HASHES; ++funcId) {
            boolean foundMinHash = false;
            for (final MinHashXOR minHashXOR : minHashXORs) {
                if (minHashXOR.getMinHashXORFuncId() == funcId) {
                    final Integer minHash = getMinHashInternal(cleanedXML, minHashXOR.getMinHashXOR());
                    if (minHash != null) {
                        retValue.put(funcId, minHash);
                    }
                    foundMinHash = true;
                    break;
                }
            }
            if (!foundMinHash) {
                throw new IllegalStateException("Did not find a minhash xor int for function " + funcId);
            }
        }

        return retValue;
    }
Generate the min hashes
@param xml The content to apply the signature to
@param minHashXORs The list of XOR values to apply to the hash code
@return