private void UpdateSingleWordTaxonNamePartOfTypeRanks(XmlNode context, string xpath, IEnumerable<ITaxonNamePart> listOfNonSingleWordTaxonNameParts)
        {
            var document = context.OwnerDocument();

            context.SelectNodes(xpath)
                .Cast<XmlNode>()
                .AsParallel()
                .ForAll(node =>
                {
                    var taxonNamePart = new TaxonNamePart(node);
                    var matches = listOfNonSingleWordTaxonNameParts.Where(t => t.FullName == taxonNamePart.FullName).ToList();
                    if (matches.Count == 1)
                    {
                        var match = matches.First();
                        if (match.Rank != taxonNamePart.Rank)
                        {
                            XmlAttribute rankAttribute = node.Attributes[AttributeNames.Type];
                            if (rankAttribute == null)
                            {
                                rankAttribute = document.CreateAttribute(AttributeNames.Type);
                                node.Attributes.Append(rankAttribute);
                            }

                            rankAttribute.InnerText = match.Rank.ToRankString();
                        }
                    }
                });
        }
        public void TaxonNamePart_WithValidNodeParameterInConstructor_ShouldReturnValidObject(string nodeString, SpeciesPartType taxonRank, string fullName, string taxonName, string id, bool abbreviated)
        {
            // Arrange
            var document = new XmlDocument();

            document.LoadXml(nodeString);

            // Act
            var taxonNamePart = new TaxonNamePart(document.DocumentElement);

            // Assert
            Assert.IsNotNull(taxonNamePart, "Object should not be null.");

            Assert.AreEqual(abbreviated, taxonNamePart.IsAbbreviated, "Taxon name part should " + (abbreviated ? "not " : string.Empty) + "be abbreviated.");
            Assert.AreEqual(taxonRank, taxonNamePart.Rank, $"Rank should be '{taxonRank}'.");
            Assert.AreEqual(taxonName, taxonNamePart.Name, $"Name should be '{taxonName}'.");
            Assert.AreEqual(fullName, taxonNamePart.FullName, $"Full Name should be '{fullName}'.");
            Assert.AreEqual(id, taxonNamePart.Id, $"Id should be '{id}'.");
        }