FieldStartAccept Method |
Namespace: Aspose.Words.Fields
Calls VisitFieldStart(FieldStart).
For more info see the Visitor design pattern.
public void FieldCollection() { // Create a new document and insert some fields Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.InsertField(" DATE \\@ \"dddd, d MMMM yyyy\" "); builder.InsertField(" TIME "); builder.InsertField(" REVNUM "); builder.InsertField(" AUTHOR \"John Doe\" "); builder.InsertField(" SUBJECT \"My Subject\" "); builder.InsertField(" QUOTE \"Hello world!\" "); doc.UpdateFields(); // Get the collection that contains all the fields in a document FieldCollection fields = doc.Range.Fields; Assert.AreEqual(6, fields.Count); // Iterate over the field collection and print contents and type of every field using a custom visitor implementation FieldVisitor fieldVisitor = new FieldVisitor(); using (IEnumerator<Field> fieldEnumerator = fields.GetEnumerator()) { while (fieldEnumerator.MoveNext()) { if (fieldEnumerator.Current != null) { fieldEnumerator.Current.Start.Accept(fieldVisitor); fieldEnumerator.Current.Separator?.Accept(fieldVisitor); fieldEnumerator.Current.End.Accept(fieldVisitor); } else { Console.WriteLine("There are no fields in the document."); } } } Console.WriteLine(fieldVisitor.GetText()); // Get a field to remove itself fields[0].Remove(); Assert.AreEqual(5, fields.Count); // Remove a field by reference Field lastField = fields[3]; fields.Remove(lastField); Assert.AreEqual(4, fields.Count); // Remove a field by index fields.RemoveAt(2); Assert.AreEqual(3, fields.Count); // Remove all fields from the document fields.Clear(); Assert.AreEqual(0, fields.Count); } /// <summary> /// Document visitor implementation that prints field info. /// </summary> public class FieldVisitor : DocumentVisitor { public FieldVisitor() { mBuilder = new StringBuilder(); } /// <summary> /// Gets the plain text of the document that was accumulated by the visitor. /// </summary> public string GetText() { return mBuilder.ToString(); } /// <summary> /// Called when a FieldStart node is encountered in the document. /// </summary> public override VisitorAction VisitFieldStart(FieldStart fieldStart) { mBuilder.AppendLine("Found field: " + fieldStart.FieldType); mBuilder.AppendLine("\tField code: " + fieldStart.GetField().GetFieldCode()); mBuilder.AppendLine("\tDisplayed as: " + fieldStart.GetField().Result); return VisitorAction.Continue; } /// <summary> /// Called when a FieldSeparator node is encountered in the document. /// </summary> public override VisitorAction VisitFieldSeparator(FieldSeparator fieldSeparator) { mBuilder.AppendLine("\tFound separator: " + fieldSeparator.GetText()); return VisitorAction.Continue; } /// <summary> /// Called when a FieldEnd node is encountered in the document. /// </summary> public override VisitorAction VisitFieldEnd(FieldEnd fieldEnd) { mBuilder.AppendLine("End of field: " + fieldEnd.FieldType); return VisitorAction.Continue; } private readonly StringBuilder mBuilder; }