public void Apply(IEnumerable <SdtElement> sdts, bool isTopLevel)
        {
            foreach (var sdt in sdts)
            {
                var tagName = OpenXmlHelper.GetTag(sdt);

                var templateSdt = Template.FirstOrDefault(el => OpenXmlHelper.GetTag(el) == tagName);

                if (templateSdt == null)
                {
                    continue;
                }

                var sdtContent = sdt.GetFirstChild <SdtContentBlock>();
                sdtContent.RemoveAllChildren();

                var templateElements = templateSdt.GetFirstChild <SdtContentBlock>().Elements().ToList();

                if (!ElementData.Any() && isTopLevel)
                {
                    var p    = new Paragraph();
                    var r    = new Run();
                    var text = new Text("-");
                    r.AppendChild(text);
                    p.AppendChild(r);
                    sdtContent.AppendChild(p);
                }

                foreach (var elementData in ElementData)
                {
                    var allClones = new List <OpenXmlElement>();

                    foreach (var templateElement in templateElements)
                    {
                        var clone = templateElement.CloneNode(true);
                        allClones.Add(clone);

                        if (isTopLevel)
                        {
                            sdtContent.AppendChild(clone);
                        }
                        else
                        {
                            sdt.Parent.InsertBefore(clone, sdt);
                        }
                    }

                    elementData.Apply(allClones, isTopLevel: false);
                }

                if (!isTopLevel)
                {
                    sdt.Remove();
                }
            }
        }