internal static string AddFingerprintTextProcessor(XDocument rulePackXDoc, Fingerprint fingerprint)
        {
            ArgumentValidator.ThrowIfNull("rulePackXDoc", rulePackXDoc);
            ArgumentValidator.ThrowIfNull("fingerprint", fingerprint);
            XElement xelement = rulePackXDoc.Descendants(XmlProcessingUtils.GetMceNsQualifiedNodeName("LocalizedStrings")).FirstOrDefault <XElement>();

            if (xelement == null)
            {
                throw new ClassificationRuleCollectionInvalidObjectException(Strings.ClassificationRuleCollectionInvalidObject);
            }
            XElement fingerprintProcessor = XmlProcessingUtils.GetFingerprintProcessor(rulePackXDoc, fingerprint);

            if (fingerprintProcessor == null)
            {
                fingerprint.Identity          = Guid.NewGuid().ToString();
                fingerprint.ActualDescription = fingerprint.Description;
                xelement.AddBeforeSelf(fingerprint.ToXElement());
            }
            else
            {
                fingerprint.Identity = XmlProcessingUtils.GetAttributeValue(fingerprintProcessor, "id");
                string attributeValue = XmlProcessingUtils.GetAttributeValue(fingerprintProcessor, "description");
                if (string.IsNullOrEmpty(attributeValue) && !string.IsNullOrEmpty(fingerprint.Description))
                {
                    fingerprintProcessor.SetAttributeValue("description", fingerprint.Description);
                    fingerprint.ActualDescription = fingerprint.Description;
                }
                else
                {
                    fingerprint.ActualDescription = attributeValue;
                }
            }
            return(fingerprint.Identity);
        }