Accept
Innehåll
[
Dölj
]Body.Accept method
Accepterar en besökare.
public override bool Accept(DocumentVisitor visitor)
Parameter | Typ | Beskrivning |
---|---|---|
visitor | DocumentVisitor | Besökaren som kommer att besöka noderna. |
Returvärde
Sant om alla noder besöktes; falskt omDocumentVisitor
stoppade operationen innan du besökte alla noder.
Anmärkningar
Räknar upp denna nod och alla dess barn. Varje nod anropar en motsvarande metodDocumentVisitor
.
För mer information se Visitor design mönster.
SamtalVisitBodyStart
, sedan ringerAccept
för alla underordnade noder i avsnittet och anropVisitBodyEnd
i slutet.
Exempel
Visar hur man använder en dokumentbesökare för att skriva ut ett dokuments nodstruktur.
public void DocStructureToText()
{
Document doc = new Document(MyDir + "DocumentVisitor-compatible features.docx");
DocStructurePrinter visitor = new DocStructurePrinter();
// När vi får en sammansatt nod att acceptera en dokumentbesökare, besöker besökaren den accepterande noden,
// och sedan korsar alla nodens barn på ett djup-först sätt.
// Besökaren kan läsa och ändra varje besökt nod.
doc.Accept(visitor);
Console.WriteLine(visitor.GetText());
}
/// <summary>
/// Går igenom en nods träd med undernoder.
/// Skapar en karta över detta träd i form av en sträng.
/// </summary>
public class DocStructurePrinter : DocumentVisitor
{
public DocStructurePrinter()
{
mAcceptingNodeChildTree = new StringBuilder();
}
public string GetText()
{
return mAcceptingNodeChildTree.ToString();
}
/// <summary>
/// Anropas när en dokumentnod påträffas.
/// </summary>
public override VisitorAction VisitDocumentStart(Document doc)
{
int childNodeCount = doc.GetChildNodes(NodeType.Any, true).Count;
IndentAndAppendLine("[Document start] Child nodes: " + childNodeCount);
mDocTraversalDepth++;
// Tillåt besökaren att fortsätta besöka andra noder.
return VisitorAction.Continue;
}
/// <summary>
/// Anropas efter att alla undernoder i en dokumentnod har besökts.
/// </summary>
public override VisitorAction VisitDocumentEnd(Document doc)
{
mDocTraversalDepth--;
IndentAndAppendLine("[Document end]");
return VisitorAction.Continue;
}
/// <summary>
/// Anropas när en sektionsnod påträffas i dokumentet.
/// </summary>
public override VisitorAction VisitSectionStart(Section section)
{
// Hämta indexet för vår sektion i dokumentet.
NodeCollection docSections = section.Document.GetChildNodes(NodeType.Section, false);
int sectionIndex = docSections.IndexOf(section);
IndentAndAppendLine("[Section start] Section index: " + sectionIndex);
mDocTraversalDepth++;
return VisitorAction.Continue;
}
/// <summary>
/// Anropas efter att alla undernoder i en sektionsnod har besökts.
/// </summary>
public override VisitorAction VisitSectionEnd(Section section)
{
mDocTraversalDepth--;
IndentAndAppendLine("[Section end]");
return VisitorAction.Continue;
}
/// <summary>
/// Anropas när en Body-nod påträffas i dokumentet.
/// </summary>
public override VisitorAction VisitBodyStart(Body body)
{
int paragraphCount = body.Paragraphs.Count;
IndentAndAppendLine("[Body start] Paragraphs: " + paragraphCount);
mDocTraversalDepth++;
return VisitorAction.Continue;
}
/// <summary>
/// Kallas efter att alla underordnade noder i en Kroppsnod har besökts.
/// </summary>
public override VisitorAction VisitBodyEnd(Body body)
{
mDocTraversalDepth--;
IndentAndAppendLine("[Body end]");
return VisitorAction.Continue;
}
/// <summary>
/// Anropas när en Paragraph-nod påträffas i dokumentet.
/// </summary>
public override VisitorAction VisitParagraphStart(Paragraph paragraph)
{
IndentAndAppendLine("[Paragraph start]");
mDocTraversalDepth++;
return VisitorAction.Continue;
}
/// <summary>
/// Anropas efter att alla undernoder i en Paragraph-nod har besökts.
/// </summary>
public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
{
mDocTraversalDepth--;
IndentAndAppendLine("[Paragraph end]");
return VisitorAction.Continue;
}
/// <summary>
/// Anropas när en körnod påträffas i dokumentet.
/// </summary>
public override VisitorAction VisitRun(Run run)
{
IndentAndAppendLine("[Run] \"" + run.GetText() + "\"");
return VisitorAction.Continue;
}
/// <summary>
/// Anropas när en SubDocument-nod påträffas i dokumentet.
/// </summary>
public override VisitorAction VisitSubDocument(SubDocument subDocument)
{
IndentAndAppendLine("[SubDocument]");
return VisitorAction.Continue;
}
/// <summary>
/// Lägg till en rad i StringBuilder och dra in den beroende på hur djupt besökaren befinner sig i dokumentträdet.
/// </summary>
/// <param name="text"></param>
private void IndentAndAppendLine(string text)
{
for (int i = 0; i < mDocTraversalDepth; i++) mAcceptingNodeChildTree.Append("| ");
mAcceptingNodeChildTree.AppendLine(text);
}
private int mDocTraversalDepth;
private readonly StringBuilder mAcceptingNodeChildTree;
}
Se även
- class DocumentVisitor
- class Body
- namnutrymme Aspose.Words
- hopsättning Aspose.Words