Class DocumentVisitor

DocumentVisitor class

Η αφηρημένη κλάση για επανάληψη μέσω υποδέντρου με ρίζα στον καθορισμένο κόμβο.

public abstract class DocumentVisitor

Μέθοδοι

ΟνομαΠεριγραφή
virtual VisitAttachedFileEnd(AttachedFile)Τέλος για να επισκεφθείτε τοAttachedFile κόμβος.
virtual VisitAttachedFileStart(AttachedFile)Ξεκινήστε να επισκέπτεστε τοAttachedFile κόμβος.
virtual VisitDocumentEnd(Document)Τέλος για να επισκεφθείτε τοDocument κόμβος.
virtual VisitDocumentStart(Document)Ξεκινήστε να επισκέπτεστε τοDocument κόμβος.
virtual VisitImageEnd(Image)Τέλος για να επισκεφθείτε τοImage κόμβος.
virtual VisitImageStart(Image)Ξεκινήστε να επισκέπτεστε τοImage κόμβος.
virtual VisitOutlineElementEnd(OutlineElement)Τέλος για να επισκεφθείτε τοOutlineElement κόμβος.
virtual VisitOutlineElementStart(OutlineElement)Ξεκινήστε να επισκέπτεστε τοOutlineElement κόμβος.
virtual VisitOutlineEnd(Outline)Τέλος για να επισκεφθείτε τοOutline κόμβος.
virtual VisitOutlineGroupEnd(OutlineGroup)Τέλος για να επισκεφθείτε τοOutlineGroup κόμβος.
virtual VisitOutlineGroupStart(OutlineGroup)Ξεκινήστε να επισκέπτεστε τοOutlineGroup κόμβος.
virtual VisitOutlineStart(Outline)Ξεκινήστε να επισκέπτεστε τοOutline κόμβος.
virtual VisitPageEnd(Page)Τέλος για να επισκεφθείτε τοPage κόμβος.
virtual VisitPageStart(Page)Ξεκινήστε να επισκέπτεστε τοPage κόμβος.
virtual VisitRichTextEnd(RichText)Τέλος για να επισκεφθείτε τοRichText κόμβος.
virtual VisitRichTextStart(RichText)Ξεκινήστε να επισκέπτεστε τοRichText κόμβος.
virtual VisitTableCellEnd(TableCell)Τέλος για να επισκεφθείτε τοTableCell κόμβος.
virtual VisitTableCellStart(TableCell)Ξεκινήστε να επισκέπτεστε τοTableCell κόμβος.
virtual VisitTableEnd(Table)Τέλος για να επισκεφθείτε τοTable κόμβος.
virtual VisitTableRowEnd(TableRow)Τέλος για να επισκεφθείτε τοTableRow κόμβος.
virtual VisitTableRowStart(TableRow)Ξεκινήστε να επισκέπτεστε τοTableRow κόμβος.
virtual VisitTableStart(Table)Ξεκινήστε να επισκέπτεστε τοTable κόμβος.
virtual VisitTitleEnd(Title)Τέλος για να επισκεφθείτε τοTitle κόμβος.
virtual VisitTitleStart(Title)Ξεκινήστε να επισκέπτεστε τοTitle κόμβος.

Παραδείγματα

Δείχνει τον τρόπο πρόσβασης στο περιεχόμενο ενός εγγράφου χρησιμοποιώντας τον επισκέπτη.

public static void Run()
{
    // Η διαδρομή προς τον κατάλογο εγγράφων.
    string dataDir = RunExamples.GetDataDir_LoadingAndSaving();

    // Ανοίξτε το έγγραφο που θέλουμε να μετατρέψουμε.
    Document doc = new Document(dataDir + "Aspose.one");

    // Δημιουργήστε ένα αντικείμενο που κληρονομεί από την κλάση DocumentVisitor.
    MyOneNoteToTxtWriter myConverter = new MyOneNoteToTxtWriter();

    // Αυτό είναι το γνωστό μοτίβο επισκεπτών. Πάρτε το μοντέλο για να δεχτεί έναν επισκέπτη.
    // Το μοντέλο θα επαναληφθεί μέσω του εαυτού του καλώντας τις αντίστοιχες μεθόδους
    // στο αντικείμενο επισκέπτη (αυτό ονομάζεται επίσκεψη).
    //
    // Σημειώστε ότι κάθε κόμβος στο μοντέλο αντικειμένου έχει τη μέθοδο Accept και έτσι την επίσκεψη
    // μπορεί να εκτελεστεί όχι μόνο για ολόκληρο το έγγραφο, αλλά για οποιονδήποτε κόμβο του εγγράφου.
    doc.Accept(myConverter);

    // Μόλις ολοκληρωθεί η επίσκεψη, μπορούμε να ανακτήσουμε το αποτέλεσμα της λειτουργίας,
    // που σε αυτό το παράδειγμα, έχει συσσωρευτεί στον επισκέπτη.
    Console.WriteLine(myConverter.GetText());
    Console.WriteLine(myConverter.NodeCount);            
}

/// <summary>
/// Απλή υλοποίηση της αποθήκευσης ενός εγγράφου σε μορφή απλού κειμένου. Υλοποιήθηκε ως Επισκέπτης.
/// </summary>
public class MyOneNoteToTxtWriter : DocumentVisitor
{
    public MyOneNoteToTxtWriter()
    {
        nodecount = 0;
        mIsSkipText = false;
        mBuilder = new StringBuilder();
    }

    /// <summary>
    /// Λαμβάνει το απλό κείμενο του εγγράφου που συγκεντρώθηκε από τον επισκέπτη.
    /// </summary>
    public string GetText()
    {
        return mBuilder.ToString();
    }

    /// <summary>
    /// Προσθέτει κείμενο στην τρέχουσα έξοδο. Τιμά τη σημαία ενεργοποίησης/απενεργοποίησης εξόδου.
    /// </summary>
    private void AppendText(string text)
    {
        if (!mIsSkipText)
        {
            mBuilder.AppendLine(text);
        }
    }

    /// <summary>
    /// Καλείται όταν εμφανίζεται ένας κόμβος εμπλουτισμένου κειμένου στο έγγραφο.
    /// </summary>
    public override void VisitRichTextStart(RichText run)
    {
        ++nodecount;
        AppendText(run.Text);
    }

    /// <summary>
    /// Καλείται όταν συναντάται ένας κόμβος εγγράφου στο έγγραφο.
    /// </summary>
    public override void VisitDocumentStart(Document document)
    {
        ++nodecount;
    }

    /// <summary>
    /// Καλείται όταν εμφανίζεται ένας κόμβος σελίδας στο έγγραφο.
    /// </summary>
    public override void VisitPageStart(Page page)
    {
        ++nodecount;
        this.AppendText($"*** Page '{page.Title?.TitleText?.Text ?? "(no title)"}' ***");
    }

    /// <summary>
    /// Καλείται όταν ολοκληρωθεί η επεξεργασία ενός κόμβου Σελίδας.
    /// </summary>
    public override void VisitPageEnd(Page page)
    {
        this.AppendText(string.Empty);
    }

    /// <summary>
    /// Καλείται όταν βρεθεί ένας κόμβος τίτλου στο έγγραφο.
    /// </summary>
    public override void VisitTitleStart(Title title)
    {
        ++nodecount;
    }

    /// <summary>
    /// Καλείται όταν εμφανίζεται ένας κόμβος εικόνας στο έγγραφο.
    /// </summary>
    public override void VisitImageStart(Image image)
    {
        ++nodecount;
    }

    /// <summary>
    /// Καλείται όταν ένας κόμβος OutlineGroup συναντάται στο έγγραφο.
    /// </summary>
    public override void VisitOutlineGroupStart(OutlineGroup outlineGroup)
    {
        ++nodecount;
    }

    /// <summary>
    /// Καλείται όταν συναντάται ένας κόμβος Outline στο έγγραφο.
    /// </summary>
    public override void VisitOutlineStart(Outline outline)
    {
        ++nodecount;
    }

    /// <summary>
    /// Καλείται όταν εμφανίζεται ένας κόμβος OutlineElement στο έγγραφο.
    /// </summary>
    public override void VisitOutlineElementStart(OutlineElement outlineElement)
    {
        ++nodecount;
    }

    /// <summary>
    /// Λαμβάνει τον συνολικό αριθμό των κόμβων από τον Επισκέπτη
    /// </summary>
    public Int32 NodeCount
    {
        get { return this.nodecount; }
    }

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

Δείτε επίσης