Class DocumentVisitor

DocumentVisitor class

De abstracte klasse voor iteratie door substructuur met root op het gespecificeerde knooppunt.

public abstract class DocumentVisitor

methoden

NaamBeschrijving
virtual VisitAttachedFileEnd(AttachedFile)Einde om de te bezoekenAttachedFile knooppunt.
virtual VisitAttachedFileStart(AttachedFile)Begin met het bezoeken van deAttachedFile knooppunt.
virtual VisitDocumentEnd(Document)Einde om de te bezoekenDocument knooppunt.
virtual VisitDocumentStart(Document)Begin met het bezoeken van deDocument knooppunt.
virtual VisitImageEnd(Image)Einde om de te bezoekenImage knooppunt.
virtual VisitImageStart(Image)Begin met het bezoeken van deImage knooppunt.
virtual VisitOutlineElementEnd(OutlineElement)Einde om de te bezoekenOutlineElement knooppunt.
virtual VisitOutlineElementStart(OutlineElement)Begin met het bezoeken van deOutlineElement knooppunt.
virtual VisitOutlineEnd(Outline)Einde om de te bezoekenOutline knooppunt.
virtual VisitOutlineGroupEnd(OutlineGroup)Einde om de te bezoekenOutlineGroup knooppunt.
virtual VisitOutlineGroupStart(OutlineGroup)Begin met het bezoeken van deOutlineGroup knooppunt.
virtual VisitOutlineStart(Outline)Begin met het bezoeken van deOutline knooppunt.
virtual VisitPageEnd(Page)Einde om de te bezoekenPage knooppunt.
virtual VisitPageStart(Page)Begin met het bezoeken van dePage knooppunt.
virtual VisitRichTextEnd(RichText)Einde om de te bezoekenRichText knooppunt.
virtual VisitRichTextStart(RichText)Begin met het bezoeken van deRichText knooppunt.
virtual VisitTableCellEnd(TableCell)Einde om de te bezoekenTableCell knooppunt.
virtual VisitTableCellStart(TableCell)Begin met het bezoeken van deTableCell knooppunt.
virtual VisitTableEnd(Table)Einde om de te bezoekenTable knooppunt.
virtual VisitTableRowEnd(TableRow)Einde om de te bezoekenTableRow knooppunt.
virtual VisitTableRowStart(TableRow)Begin met het bezoeken van deTableRow knooppunt.
virtual VisitTableStart(Table)Begin met het bezoeken van deTable knooppunt.
virtual VisitTitleEnd(Title)Einde om de te bezoekenTitle knooppunt.
virtual VisitTitleStart(Title)Begin met het bezoeken van deTitle knooppunt.

Voorbeelden

Laat zien hoe u toegang krijgt tot de inhoud van een document met behulp van bezoeker.

public static void Run()
{
    // Het pad naar de documentenmap.
    string dataDir = RunExamples.GetDataDir_LoadingAndSaving();

    // Open het document dat we willen converteren.
    Document doc = new Document(dataDir + "Aspose.one");

    // Maak een object dat overerft van de klasse DocumentVisitor.
    MyOneNoteToTxtWriter myConverter = new MyOneNoteToTxtWriter();

    // Dit is het bekende Visitor-patroon. Laat het model een bezoeker accepteren.
    // Het model herhaalt zichzelf door de overeenkomstige methoden aan te roepen
    // op het bezoekersobject (dit wordt bezoeken genoemd).
    //
    // Merk op dat elk knooppunt in het objectmodel de Accept-methode heeft, dus het bezoeken
    // kan niet alleen voor het hele document worden uitgevoerd, maar voor elk knooppunt in het document.
    doc.Accept(myConverter);

    // Zodra het bezoek is voltooid, kunnen we het resultaat van de operatie ophalen,
    // die zich in dit voorbeeld heeft opgehoopt in de bezoeker.
    Console.WriteLine(myConverter.GetText());
    Console.WriteLine(myConverter.NodeCount);            
}

/// <summary>
/// Eenvoudige implementatie van het opslaan van een document in platte tekst. Geïmplementeerd als bezoeker.
/// </summary>
public class MyOneNoteToTxtWriter : DocumentVisitor
{
    public MyOneNoteToTxtWriter()
    {
        nodecount = 0;
        mIsSkipText = false;
        mBuilder = new StringBuilder();
    }

    /// <summary>
    /// Krijgt de platte tekst van het document dat door de bezoeker is verzameld.
    /// </summary>
    public string GetText()
    {
        return mBuilder.ToString();
    }

    /// <summary>
    /// Voegt tekst toe aan de huidige uitvoer. Eert de uitvoervlag ingeschakeld/uitgeschakeld.
    /// </summary>
    private void AppendText(string text)
    {
        if (!mIsSkipText)
        {
            mBuilder.AppendLine(text);
        }
    }

    /// <summary>
    /// Aangeroepen wanneer een RichText-knooppunt wordt aangetroffen in het document.
    /// </summary>
    public override void VisitRichTextStart(RichText run)
    {
        ++nodecount;
        AppendText(run.Text);
    }

    /// <summary>
    /// Aangeroepen wanneer een documentknooppunt wordt aangetroffen in het document.
    /// </summary>
    public override void VisitDocumentStart(Document document)
    {
        ++nodecount;
    }

    /// <summary>
    /// Aangeroepen wanneer een paginaknooppunt wordt aangetroffen in het document.
    /// </summary>
    public override void VisitPageStart(Page page)
    {
        ++nodecount;
        this.AppendText($"*** Page '{page.Title?.TitleText?.Text ?? "(no title)"}' ***");
    }

    /// <summary>
    /// Opgeroepen wanneer de verwerking van een paginaknooppunt is voltooid.
    /// </summary>
    public override void VisitPageEnd(Page page)
    {
        this.AppendText(string.Empty);
    }

    /// <summary>
    /// Aangeroepen wanneer een titelknooppunt wordt aangetroffen in het document.
    /// </summary>
    public override void VisitTitleStart(Title title)
    {
        ++nodecount;
    }

    /// <summary>
    /// Aangeroepen wanneer een afbeeldingsknooppunt wordt aangetroffen in het document.
    /// </summary>
    public override void VisitImageStart(Image image)
    {
        ++nodecount;
    }

    /// <summary>
    /// Aangeroepen wanneer een OutlineGroup-knooppunt wordt aangetroffen in het document.
    /// </summary>
    public override void VisitOutlineGroupStart(OutlineGroup outlineGroup)
    {
        ++nodecount;
    }

    /// <summary>
    /// Aangeroepen wanneer een Outline-knooppunt wordt aangetroffen in het document.
    /// </summary>
    public override void VisitOutlineStart(Outline outline)
    {
        ++nodecount;
    }

    /// <summary>
    /// Aangeroepen wanneer een OutlineElement-knooppunt wordt aangetroffen in het document.
    /// </summary>
    public override void VisitOutlineElementStart(OutlineElement outlineElement)
    {
        ++nodecount;
    }

    /// <summary>
    /// Krijgt het totale aantal nodes van de bezoeker
    /// </summary>
    public Int32 NodeCount
    {
        get { return this.nodecount; }
    }

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

Zie ook