Class DocumentVisitor

DocumentVisitor class

Die abstrakte Klasse zum Iterieren durch den Teilbaum mit Wurzel am angegebenen Knoten.

public abstract class DocumentVisitor

Methoden

NameBeschreibung
virtual VisitAttachedFileEnd(AttachedFile)Ende zu besuchenAttachedFile Knoten.
virtual VisitAttachedFileStart(AttachedFile)Beginnen Sie mit dem Besuch derAttachedFile Knoten.
virtual VisitDocumentEnd(Document)Ende zu besuchenDocument Knoten.
virtual VisitDocumentStart(Document)Beginnen Sie mit dem Besuch derDocument Knoten.
virtual VisitImageEnd(Image)Ende zu besuchenImage Knoten.
virtual VisitImageStart(Image)Beginnen Sie mit dem Besuch derImage Knoten.
virtual VisitOutlineElementEnd(OutlineElement)Ende zu besuchenOutlineElement Knoten.
virtual VisitOutlineElementStart(OutlineElement)Beginnen Sie mit dem Besuch derOutlineElement Knoten.
virtual VisitOutlineEnd(Outline)Ende zu besuchenOutline Knoten.
virtual VisitOutlineGroupEnd(OutlineGroup)Ende zu besuchenOutlineGroup Knoten.
virtual VisitOutlineGroupStart(OutlineGroup)Beginnen Sie mit dem Besuch derOutlineGroup Knoten.
virtual VisitOutlineStart(Outline)Beginnen Sie mit dem Besuch derOutline Knoten.
virtual VisitPageEnd(Page)Ende zu besuchenPage Knoten.
virtual VisitPageStart(Page)Beginnen Sie mit dem Besuch derPage Knoten.
virtual VisitRichTextEnd(RichText)Ende zu besuchenRichText Knoten.
virtual VisitRichTextStart(RichText)Beginnen Sie mit dem Besuch derRichText Knoten.
virtual VisitTableCellEnd(TableCell)Ende zu besuchenTableCell Knoten.
virtual VisitTableCellStart(TableCell)Beginnen Sie mit dem Besuch derTableCell Knoten.
virtual VisitTableEnd(Table)Ende zu besuchenTable Knoten.
virtual VisitTableRowEnd(TableRow)Ende zu besuchenTableRow Knoten.
virtual VisitTableRowStart(TableRow)Beginnen Sie mit dem Besuch derTableRow Knoten.
virtual VisitTableStart(Table)Beginnen Sie mit dem Besuch derTable Knoten.
virtual VisitTitleEnd(Title)Ende zu besuchenTitle Knoten.
virtual VisitTitleStart(Title)Beginnen Sie mit dem Besuch derTitle Knoten.

Beispiele

Zeigt, wie Sie mit „Besucher“ auf den Inhalt eines Dokuments zugreifen.

public static void Run()
{
    // Der Pfad zum Dokumentenverzeichnis.
    string dataDir = RunExamples.GetDataDir_LoadingAndSaving();

    // Öffnen Sie das Dokument, das wir konvertieren möchten.
    Document doc = new Document(dataDir + "Aspose.one");

    // Ein Objekt erstellen, das von der DocumentVisitor-Klasse erbt.
    MyOneNoteToTxtWriter myConverter = new MyOneNoteToTxtWriter();

    // Dies ist das bekannte Besuchermuster. Bringen Sie das Modell dazu, einen Besucher anzunehmen.
    // Das Modell iteriert durch sich selbst, indem es die entsprechenden Methoden aufruft
    // auf dem Besucherobjekt (dies wird Besuch genannt).
    //
    // Beachten Sie, dass jeder Knoten im Objektmodell die Accept-Methode hat, also den Besuch
    // kann nicht nur für das gesamte Dokument ausgeführt werden, sondern für jeden Knoten im Dokument.
    doc.Accept(myConverter);

    // Sobald der Besuch abgeschlossen ist, können wir das Ergebnis der Operation abrufen,
    // die sich in diesem Beispiel im Besucher angesammelt hat.
    Console.WriteLine(myConverter.GetText());
    Console.WriteLine(myConverter.NodeCount);            
}

/// <summary>
/// Einfache Implementierung zum Speichern eines Dokuments im Nur-Text-Format. Als Besucher implementiert.
/// </summary>
public class MyOneNoteToTxtWriter : DocumentVisitor
{
    public MyOneNoteToTxtWriter()
    {
        nodecount = 0;
        mIsSkipText = false;
        mBuilder = new StringBuilder();
    }

    /// <summary>
    /// Ruft den Klartext des Dokuments ab, das vom Besucher angesammelt wurde.
    /// </summary>
    public string GetText()
    {
        return mBuilder.ToString();
    }

    /// <summary>
    /// Fügt Text zur aktuellen Ausgabe hinzu. Berücksichtigt das aktivierte/deaktivierte Ausgangsflag.
    /// </summary>
    private void AppendText(string text)
    {
        if (!mIsSkipText)
        {
            mBuilder.AppendLine(text);
        }
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein RichText-Knoten gefunden wird.
    /// </summary>
    public override void VisitRichTextStart(RichText run)
    {
        ++nodecount;
        AppendText(run.Text);
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein Dokumentknoten gefunden wird.
    /// </summary>
    public override void VisitDocumentStart(Document document)
    {
        ++nodecount;
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein Page-Knoten gefunden wird.
    /// </summary>
    public override void VisitPageStart(Page page)
    {
        ++nodecount;
        this.AppendText($"*** Page '{page.Title?.TitleText?.Text ?? "(no title)"}' ***");
    }

    /// <summary>
    /// Wird aufgerufen, wenn die Verarbeitung eines Seitenknotens abgeschlossen ist.
    /// </summary>
    public override void VisitPageEnd(Page page)
    {
        this.AppendText(string.Empty);
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein Titelknoten gefunden wird.
    /// </summary>
    public override void VisitTitleStart(Title title)
    {
        ++nodecount;
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein Image-Knoten gefunden wird.
    /// </summary>
    public override void VisitImageStart(Image image)
    {
        ++nodecount;
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein OutlineGroup-Knoten gefunden wird.
    /// </summary>
    public override void VisitOutlineGroupStart(OutlineGroup outlineGroup)
    {
        ++nodecount;
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein Outline-Knoten gefunden wird.
    /// </summary>
    public override void VisitOutlineStart(Outline outline)
    {
        ++nodecount;
    }

    /// <summary>
    /// Wird aufgerufen, wenn im Dokument ein OutlineElement-Knoten gefunden wird.
    /// </summary>
    public override void VisitOutlineElementStart(OutlineElement outlineElement)
    {
        ++nodecount;
    }

    /// <summary>
    /// Ruft die Gesamtzahl der Knoten des Besuchers ab
    /// </summary>
    public Int32 NodeCount
    {
        get { return this.nodecount; }
    }

    private readonly StringBuilder mBuilder;
    private bool mIsSkipText;
    private Int32 nodecount;
}

Siehe auch