protected XElement[] GetTargetStructureForSubstructureChange(TargetDocument targetDocument, Saetning saetning)
        {
            var targetStructure = saetning.GetAncestorsAndSelf.FirstOrDefault(e => e.IsStructureElement);

            var structureElementsFound = FindStructureElementsInTargetDocument(targetDocument, targetStructure).ToArray();

            return(structureElementsFound);
        }
        private static void DoSubStructureInsertAfter(XElement[] structureElementsFound, Saetning saetning,
                                                      IEnumerable <XElement> aendringAktionChange)
        {
            foreach (var xElement in structureElementsFound)
            {
                var punktumPerCharMap = xElement.Descendants("Char")
                                        .Select(charElement => new
                {
                    Char            = charElement,
                    NumberOfPunktum = charElement.Value.Count(c => c == '.')
                });
                int      acc        = 0;
                XElement targetChar = null;
                using (var enumerator = punktumPerCharMap.GetEnumerator())
                {
                    while (acc <= saetning.NummerStrong && enumerator.MoveNext())
                    {
                        acc        = acc + enumerator.Current.NumberOfPunktum;
                        targetChar = enumerator.Current.Char;
                    }
                }
                if (targetChar == null)
                {
                    throw new ApplyAendringerException("No char elemenet is found. Something is wrong.");
                }

                var targetLinea = targetChar.Parent;
                targetLinea.AddAfterSelf(aendringAktionChange.Descendants("Linea"));
            }
        }