public TableTag Parse(XElement startElement, XElement endTableTag) { var itemsSource = startElement.Value; if (string.IsNullOrEmpty(itemsSource)) { throw new Exception(string.Format(MessageStrings.TagNotFoundOrEmpty, "Items")); } var tag = new TableTag { TagTable = startElement, TagEndTable = endTableTag, ItemsSource = itemsSource, }; tag.MakeTableElementCallback = MakeTableElementCallback; int? dynamicRow = null; var rowCount = 1; //var between = TraverseUtils.SecondElementsBetween(startElement, endTableTag); var tableElement = startElement.NextSdt(WordMl.TableName).FirstOrDefault(element => element.IsBefore(endTableTag)); var rows = TraverseUtils.SecondElementsBetween(startElement, endTableTag).Descendants(WordMl.TableRowName).Where(tr => tr.Parent.Equals(tableElement)); //var tableElement = startElement.NextSdt(WordMl.TableName).FirstOrDefault(element => element.IsBefore(endTableTag)); // TODO Extend sdt names in loop foreach (var tableRow in rows) { if ( tableRow.Descendants() .Any( el => el.IsTag(ItemIndexTagName) || el.IsTag(ItemTextTagName) || el.IsTag(ItemIfTagName) || el.IsTag(ItemHtmlContentTagName) || el.IsTag(ItemRepeaterTagName))) { if (dynamicRow != null) { throw new Exception("Invalid template! Found several dynamic rows. (Or none dynamic rows)"); } dynamicRow = rowCount; } rowCount++; } if (tableElement != null) { tag.Table = tableElement; } tag.DynamicRow = dynamicRow; return tag; }
private void CheckTagElements(TableTag tag) { Assert.IsNotNull(tag.TagTable); Assert.AreEqual("Table", tag.TagTable.Element(WordMl.SdtPrName).Element(WordMl.TagName).Attribute(WordMl.ValAttributeName).Value); /* Assert.IsNotNull(tag.TagContent); Assert.AreEqual("Content", tag.TagContent.Element(WordMl.SdtPrName).Element(WordMl.TagName).Attribute(WordMl.ValAttributeName).Value); Assert.IsNotNull(tag.TagEndContent); Assert.AreEqual("EndContent", tag.TagEndContent.Element(WordMl.SdtPrName).Element(WordMl.TagName).Attribute(WordMl.ValAttributeName).Value); Assert.IsNotNull(tag.TagEndTable);*/ Assert.AreEqual("EndTable", tag.TagEndTable.Element(WordMl.SdtPrName).Element(WordMl.TagName).Attribute(WordMl.ValAttributeName).Value); }