DocumentVisitor

DocumentVisitor class

Basisklasse für benutzerdefinierte Dokumentbesucher.

public abstract class DocumentVisitor

Methoden

Name Beschreibung
virtual VisitAbsolutePositionTab(AbsolutePositionTab) Angerufen, wenn aAbsolutePositionTab Knoten wird im Dokument gefunden.
virtual VisitBodyEnd(Body) Wird aufgerufen, wenn die Aufzählung der Haupttextgeschichte in einem Abschnitt beendet ist.
virtual VisitBodyStart(Body) Wird aufgerufen, wenn die Aufzählung der Haupttextgeschichte in einem Abschnitt begonnen hat.
virtual VisitBookmarkEnd(BookmarkEnd) Wird aufgerufen, wenn das Ende eines Lesezeichens im Dokument gefunden wird.
virtual VisitBookmarkStart(BookmarkStart) Wird aufgerufen, wenn im Dokument der Anfang eines Lesezeichens gefunden wird.
virtual VisitBuildingBlockEnd(BuildingBlock) Wird aufgerufen, wenn die Aufzählung eines Bausteins beendet ist.
virtual VisitBuildingBlockStart(BuildingBlock) Wird aufgerufen, wenn die Enumeration eines Bausteins gestartet wurde.
virtual VisitCellEnd(Cell) Wird aufgerufen, wenn die Aufzählung einer Tabellenzelle beendet ist.
virtual VisitCellStart(Cell) Wird aufgerufen, wenn die Aufzählung einer Tabellenzelle begonnen hat.
virtual VisitCommentEnd(Comment) Wird aufgerufen, wenn die Aufzählung eines Kommentartextes beendet ist.
virtual VisitCommentRangeEnd(CommentRangeEnd) Wird aufgerufen, wenn das Ende eines kommentierten Textbereichs erreicht wird.
virtual VisitCommentRangeStart(CommentRangeStart) Wird aufgerufen, wenn der Anfang eines kommentierten Textbereichs gefunden wird.
virtual VisitCommentStart(Comment) Wird aufgerufen, wenn die Aufzählung eines Kommentartextes begonnen hat.
virtual VisitDocumentEnd(Document) Wird aufgerufen, wenn die Aufzählung des Dokuments abgeschlossen ist.
virtual VisitDocumentStart(Document) Wird aufgerufen, wenn die Aufzählung des Dokuments gestartet wurde.
virtual VisitEditableRangeEnd(EditableRangeEnd) Wird aufgerufen, wenn im Dokument ein Ende eines bearbeitbaren Bereichs gefunden wird.
virtual VisitEditableRangeStart(EditableRangeStart) Wird aufgerufen, wenn im Dokument ein Anfang eines bearbeitbaren Bereichs gefunden wird.
virtual VisitFieldEnd(FieldEnd) Wird aufgerufen, wenn ein Feld im Dokument endet.
virtual VisitFieldSeparator(FieldSeparator) Wird aufgerufen, wenn im Dokument ein Feldtrennzeichen gefunden wird.
virtual VisitFieldStart(FieldStart) Wird aufgerufen, wenn ein Feld im Dokument beginnt.
virtual VisitFootnoteEnd(Footnote) Wird aufgerufen, wenn die Aufzählung eines Fußnoten- oder Endnotentexts beendet ist.
virtual VisitFootnoteStart(Footnote) Wird aufgerufen, wenn die Aufzählung eines Fußnoten- oder Endnotentextes begonnen hat.
virtual VisitFormField(FormField) Wird aufgerufen, wenn ein Formularfeld im Dokument gefunden wird.
virtual VisitGlossaryDocumentEnd(GlossaryDocument) Wird aufgerufen, wenn die Aufzählung eines Glossardokuments beendet ist.
virtual VisitGlossaryDocumentStart(GlossaryDocument) Wird aufgerufen, wenn die Aufzählung eines Glossardokuments begonnen hat.
virtual VisitGroupShapeEnd(GroupShape) Wird aufgerufen, wenn die Aufzählung einer Gruppenform beendet ist.
virtual VisitGroupShapeStart(GroupShape) Wird aufgerufen, wenn die Aufzählung einer Gruppenform begonnen hat.
virtual VisitHeaderFooterEnd(HeaderFooter) Wird aufgerufen, wenn die Aufzählung einer Kopf- oder Fußzeile in einem Abschnitt beendet ist.
virtual VisitHeaderFooterStart(HeaderFooter) Wird aufgerufen, wenn die Aufzählung einer Kopf- oder Fußzeile in einem Abschnitt begonnen hat.
virtual VisitOfficeMathEnd(OfficeMath) Wird aufgerufen, wenn die Aufzählung eines Office Math-Objekts beendet ist.
virtual VisitOfficeMathStart(OfficeMath) Wird aufgerufen, wenn die Aufzählung eines Office Math-Objekts gestartet wurde.
virtual VisitParagraphEnd(Paragraph) Wird aufgerufen, wenn die Aufzählung eines Absatzes beendet ist.
virtual VisitParagraphStart(Paragraph) Wird aufgerufen, wenn die Aufzählung eines Absatzes begonnen hat.
virtual VisitRowEnd(Row) Wird aufgerufen, wenn die Aufzählung einer Tabellenzeile beendet ist.
virtual VisitRowStart(Row) Wird aufgerufen, wenn die Aufzählung einer Tabellenzeile begonnen hat.
virtual VisitRun(Run) Wird aufgerufen, wenn eine Textfolge im gefunden wird.
virtual VisitSectionEnd(Section) Wird aufgerufen, wenn die Aufzählung eines Abschnitts beendet ist.
virtual VisitSectionStart(Section) Wird aufgerufen, wenn die Aufzählung eines Abschnitts begonnen hat.
virtual VisitShapeEnd(Shape) Wird aufgerufen, wenn die Aufzählung einer Form beendet ist.
virtual VisitShapeStart(Shape) Wird aufgerufen, wenn die Aufzählung einer Form begonnen hat.
virtual VisitSmartTagEnd(SmartTag) Wird aufgerufen, wenn die Aufzählung eines Smarttags beendet ist.
virtual VisitSmartTagStart(SmartTag) Wird aufgerufen, wenn die Aufzählung eines Smarttags begonnen hat.
virtual VisitSpecialChar(SpecialChar) Angerufen, wenn aSpecialChar Knoten wird im Dokument gefunden.
virtual VisitStructuredDocumentTagEnd(StructuredDocumentTag) Wird aufgerufen, wenn die Aufzählung eines strukturierten Dokument-Tags beendet ist.
virtual VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd)
virtual VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart)
virtual VisitStructuredDocumentTagStart(StructuredDocumentTag) Wird aufgerufen, wenn die Aufzählung eines strukturierten Dokument-Tags begonnen hat.
virtual VisitSubDocument(SubDocument) Wird aufgerufen, wenn ein Unterdokument gefunden wird.
virtual VisitTableEnd(Table) Wird aufgerufen, wenn die Aufzählung einer Tabelle beendet ist.
virtual VisitTableStart(Table) Wird aufgerufen, wenn die Aufzählung einer Tabelle gestartet wurde.

Bemerkungen

Mit DokumentBesucher Sie können benutzerdefinierte Operationen definieren und ausführen, die eine Aufzählung über den Dokumentbaum erfordern.

Beispielsweise verwendet Aspose.Words DokumentBesucher intern zum Speichern Dokumentieren in verschiedenen Formaten und für andere Operationen wie das Suchen von Feldern oder Lesezeichen über einem Fragment eines Dokuments.

Benutzen DokumentBesucher:

  1. Erstellen Sie eine abgeleitete Klasse DokumentBesucher.
  2. Überschreiben und stellen Sie Implementierungen für einige oder alle VisitXXX-Methoden bereit, um einige benutzerdefinierte Operationen auszuführen.
  3. AnrufKnoten.Akzeptieren auf der Knoten that , von dem aus Sie die Aufzählung starten möchten.

DokumentBesucherbietet Standardimplementierungen für alle VisitXXX-Methoden , um das Erstellen neuer Dokumentbesucher zu vereinfachen, da nur die Methoden überschrieben werden müssen, die für den jeweiligen -Besucher erforderlich sind. Es ist nicht erforderlich, alle Besuchermethoden zu überschreiben.

Weitere Informationen finden Sie im Besucher-Entwurfsmuster.

Beispiele

Zeigt, wie ein Dokument-Besucher verwendet wird, um die Knotenstruktur eines Dokuments zu drucken.

public void DocStructureToText()
{
    Document doc = new Document(MyDir + "DocumentVisitor-compatible features.docx");
    DocStructurePrinter visitor = new DocStructurePrinter();

    // Wenn wir einen zusammengesetzten Knoten dazu bringen, einen Dokumentbesucher zu akzeptieren, besucht der Besucher den akzeptierenden Knoten,
    // und durchläuft dann alle untergeordneten Elemente des Knotens mit der Tiefe zuerst.
    // Der Besucher kann jeden besuchten Knoten lesen und ändern.
    doc.Accept(visitor);

    Console.WriteLine(visitor.GetText());
}

/// <summary>
/// Durchläuft den Baum der untergeordneten Knoten eines Knotens.
/// Erstellt eine Karte dieses Baums in Form einer Zeichenfolge.
/// </summary>
public class DocStructurePrinter : DocumentVisitor
{
    public DocStructurePrinter()
    {
        mAcceptingNodeChildTree = new StringBuilder();
    }

    public string GetText()
    {
        return mAcceptingNodeChildTree.ToString();
    }

    /// <summary>
    /// Wird aufgerufen, wenn ein Dokumentknoten gefunden wird.
    /// </summary>
    public override VisitorAction VisitDocumentStart(Document doc)
    {
        int childNodeCount = doc.GetChildNodes(NodeType.Any, true).Count;

        IndentAndAppendLine("[Document start] Child nodes: " + childNodeCount);
        mDocTraversalDepth++;

        // Dem Besucher erlauben, weiterhin andere Knoten zu besuchen.
        return VisitorAction.Continue;
    }

    /// <summary>
    /// Wird aufgerufen, nachdem alle untergeordneten Knoten eines Dokumentknotens besucht wurden.
    /// </summary>
    public override VisitorAction VisitDocumentEnd(Document doc)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Document end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein Abschnittsknoten gefunden wird.
    /// </summary>
    public override VisitorAction VisitSectionStart(Section section)
    {
        // Holen Sie sich den Index unseres Abschnitts innerhalb des Dokuments.
        NodeCollection docSections = section.Document.GetChildNodes(NodeType.Section, false);
        int sectionIndex = docSections.IndexOf(section);

        IndentAndAppendLine("[Section start] Section index: " + sectionIndex);
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Wird aufgerufen, nachdem alle untergeordneten Knoten eines Abschnittsknotens besucht wurden.
    /// </summary>
    public override VisitorAction VisitSectionEnd(Section section)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Section end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein Body-Knoten gefunden wird.
    /// </summary>
    public override VisitorAction VisitBodyStart(Body body)
    {
        int paragraphCount = body.Paragraphs.Count;
        IndentAndAppendLine("[Body start] Paragraphs: " + paragraphCount);
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Wird aufgerufen, nachdem alle untergeordneten Knoten eines Body-Knotens besucht wurden.
    /// </summary>
    public override VisitorAction VisitBodyEnd(Body body)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Body end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein Paragraph-Knoten gefunden wird.
    /// </summary>
    public override VisitorAction VisitParagraphStart(Paragraph paragraph)
    {
        IndentAndAppendLine("[Paragraph start]");
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Wird aufgerufen, nachdem alle untergeordneten Knoten eines Absatzknotens besucht wurden.
    /// </summary>
    public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Paragraph end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein Run-Knoten gefunden wird.
    /// </summary>
    public override VisitorAction VisitRun(Run run)
    {
        IndentAndAppendLine("[Run] \"" + run.GetText() + "\"");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein SubDocument-Knoten gefunden wird.
    /// </summary>
    public override VisitorAction VisitSubDocument(SubDocument subDocument)
    {
        IndentAndAppendLine("[SubDocument]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Eine Zeile an den StringBuilder anhängen und einrücken, je nachdem, wie tief der Besucher in den Dokumentenbaum eindringt.
    /// </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;
}

Siehe auch