DocumentVisitor

DocumentVisitor class

Basisklasse für benutzerdefinierte Dokumentbesucher.

Um mehr zu erfahren, besuchen Sie dieAspose.Words Document Object Model (DOM) Dokumentationsartikel.

public abstract class DocumentVisitor

Methoden

NameBeschreibung
virtual VisitAbsolutePositionTab(AbsolutePositionTab)Wird aufgerufen, 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 im Dokument das Ende eines Lesezeichens festgestellt 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 wurde.
virtual VisitBuildingBlockStart(BuildingBlock)Wird aufgerufen, wenn die Aufzählung eines Bausteins begonnen hat.
virtual VisitCellEnd(Cell)Wird aufgerufen, wenn die Aufzählung einer Tabellenzelle beendet wurde.
virtual VisitCellStart(Cell)Wird aufgerufen, wenn die Aufzählung einer Tabellenzelle gestartet wurde.
virtual VisitCommentEnd(Comment)Wird aufgerufen, wenn die Aufzählung eines Kommentartextes beendet wurde.
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 gestartet wurde.
virtual VisitDocumentEnd(Document)Wird aufgerufen, wenn die Aufzählung des Dokuments abgeschlossen ist.
virtual VisitDocumentStart(Document)Wird aufgerufen, wenn die Aufzählung des Dokuments begonnen hat.
virtual VisitEditableRangeEnd(EditableRangeEnd)Wird aufgerufen, wenn im Dokument das Ende eines bearbeitbaren Bereichs erreicht wird.
virtual VisitEditableRangeStart(EditableRangeStart)Wird aufgerufen, wenn im Dokument der 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 Endnotentextes beendet wurde.
virtual VisitFootnoteStart(Footnote)Wird aufgerufen, wenn die Aufzählung eines Fußnoten- oder Endnotentextes begonnen hat.
virtual VisitFormField(FormField)Wird aufgerufen, wenn im Dokument ein Formularfeld gefunden wird.
virtual VisitGlossaryDocumentEnd(GlossaryDocument)Wird aufgerufen, wenn die Aufzählung eines Glossardokuments beendet wurde.
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 wurde.
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 wurde.
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 wurde.
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 wurde.
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 wurde.
virtual VisitRowStart(Row)Wird aufgerufen, wenn die Aufzählung einer Tabellenzeile gestartet wurde.
virtual VisitRun(Run)Wird aufgerufen, wenn eine Textzeile im gefunden wird.
virtual VisitSectionEnd(Section)Wird aufgerufen, wenn die Aufzählung eines Abschnitts beendet wurde.
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 wurde.
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 wurde.
virtual VisitSmartTagStart(SmartTag)Wird aufgerufen, wenn die Aufzählung eines Smarttags gestartet wurde.
virtual VisitSpecialChar(SpecialChar)Wird aufgerufen, wenn aSpecialChar Knoten wird im Dokument gefunden.
virtual VisitStructuredDocumentTagEnd(StructuredDocumentTag)Wird aufgerufen, wenn die Aufzählung eines strukturierten Dokument-Tags beendet wurde.
virtual VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd)Wird aufgerufen, wenn ein StructuredDocumentTagRangeEnd gefunden wird.
virtual VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart)Wird aufgerufen, wenn ein StructuredDocumentTagRangeStart gefunden wird.
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 wurde.
virtual VisitTableStart(Table)Wird aufgerufen, wenn die Aufzählung einer Tabelle gestartet wurde.

Bemerkungen

MitDocumentVisitor Sie können benutzerdefinierte Vorgänge definieren und ausführen, die eine Aufzählung über den Dokumentbaum erfordern.

Aspose.Words verwendet beispielsweiseDocumentVisitor intern zum SpeichernDocument in verschiedenen Formaten und für andere Vorgänge wie das Suchen von Feldern oder Lesezeichen über ein Fragment eines Dokuments.

BenutzenDocumentVisitor:

  1. Erstellen Sie eine von abgeleitete KlasseDocumentVisitor.
  2. Überschreiben und stellen Sie Implementierungen für einige oder alle VisitXXX-Methoden bereit, um einige benutzerdefinierte Vorgänge auszuführen.
  3. AnrufNode.Accept auf derNode that , von dem aus Sie die Aufzählung starten möchten.

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

Weitere Informationen finden Sie im Besucherentwurfsmuster.

Beispiele

Zeigt, wie ein Dokumentbesucher zum Drucken der Knotenstruktur eines Dokuments verwendet wird.

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

    // Wenn wir einen zusammengesetzten Knoten erhalten, der einen Dokumentbesucher akzeptiert, besucht der Besucher den akzeptierenden Knoten.
    // und durchläuft dann alle untergeordneten Knoten des Knotens in einer Tiefe-zuerst-Methode.
    // 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 Document-Knoten 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>
    /// Hängen Sie eine Zeile an den StringBuilder an und rücken Sie sie ein, je nachdem, wie tief sich der Besucher im Dokumentbaum befindet.
    /// </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