Class DocumentVisitor

DocumentVisitor class

Kelas abstrak untuk iterasi melalui subtree dengan root pada node yang ditentukan.

public abstract class DocumentVisitor

Metode

NamaKeterangan
virtual VisitAttachedFileEnd(AttachedFile)Selesai untuk mengunjungiAttachedFile simpul.
virtual VisitAttachedFileStart(AttachedFile)Mulai mengunjungiAttachedFile simpul.
virtual VisitDocumentEnd(Document)Selesai untuk mengunjungiDocument simpul.
virtual VisitDocumentStart(Document)Mulai mengunjungiDocument simpul.
virtual VisitImageEnd(Image)Selesai untuk mengunjungiImage simpul.
virtual VisitImageStart(Image)Mulai mengunjungiImage simpul.
virtual VisitOutlineElementEnd(OutlineElement)Selesai untuk mengunjungiOutlineElement simpul.
virtual VisitOutlineElementStart(OutlineElement)Mulai mengunjungiOutlineElement simpul.
virtual VisitOutlineEnd(Outline)Selesai untuk mengunjungiOutline simpul.
virtual VisitOutlineGroupEnd(OutlineGroup)Selesai untuk mengunjungiOutlineGroup simpul.
virtual VisitOutlineGroupStart(OutlineGroup)Mulai mengunjungiOutlineGroup simpul.
virtual VisitOutlineStart(Outline)Mulai mengunjungiOutline simpul.
virtual VisitPageEnd(Page)Selesai untuk mengunjungiPage simpul.
virtual VisitPageStart(Page)Mulai mengunjungiPage simpul.
virtual VisitRichTextEnd(RichText)Selesai untuk mengunjungiRichText simpul.
virtual VisitRichTextStart(RichText)Mulai mengunjungiRichText simpul.
virtual VisitTableCellEnd(TableCell)Selesai untuk mengunjungiTableCell simpul.
virtual VisitTableCellStart(TableCell)Mulai mengunjungiTableCell simpul.
virtual VisitTableEnd(Table)Selesai untuk mengunjungiTable simpul.
virtual VisitTableRowEnd(TableRow)Selesai untuk mengunjungiTableRow simpul.
virtual VisitTableRowStart(TableRow)Mulai mengunjungiTableRow simpul.
virtual VisitTableStart(Table)Mulai mengunjungiTable simpul.
virtual VisitTitleEnd(Title)Selesai untuk mengunjungiTitle simpul.
virtual VisitTitleStart(Title)Mulai mengunjungiTitle simpul.

Contoh

Menunjukkan cara mengakses konten dokumen menggunakan pengunjung.

public static void Run()
{
    // Jalur ke direktori dokumen.
    string dataDir = RunExamples.GetDataDir_LoadingAndSaving();

    // Buka dokumen yang ingin kita konversi.
    Document doc = new Document(dataDir + "Aspose.one");

    // Buat objek yang mewarisi dari kelas DocumentVisitor.
    MyOneNoteToTxtWriter myConverter = new MyOneNoteToTxtWriter();

    // Ini adalah pola Pengunjung yang terkenal. Dapatkan model untuk menerima pengunjung.
    // Model akan melakukan iterasi sendiri dengan memanggil metode yang sesuai
    // pada objek pengunjung (ini disebut mengunjungi).
    //
    // Perhatikan bahwa setiap node dalam model objek memiliki metode Terima sehingga kunjungan
    // dapat dieksekusi tidak hanya untuk seluruh dokumen, tetapi untuk setiap node dalam dokumen.
    doc.Accept(myConverter);

    // Setelah kunjungan selesai, kita dapat mengambil hasil operasi,
    // yang dalam contoh ini, telah terkumpul di pengunjung.
    Console.WriteLine(myConverter.GetText());
    Console.WriteLine(myConverter.NodeCount);            
}

/// <summary>
/// Implementasi sederhana untuk menyimpan dokumen dalam format teks biasa. Diimplementasikan sebagai Pengunjung.
/// </summary>
public class MyOneNoteToTxtWriter : DocumentVisitor
{
    public MyOneNoteToTxtWriter()
    {
        nodecount = 0;
        mIsSkipText = false;
        mBuilder = new StringBuilder();
    }

    /// <summary>
    /// Mendapat teks biasa dari dokumen yang dikumpulkan oleh pengunjung.
    /// </summary>
    public string GetText()
    {
        return mBuilder.ToString();
    }

    /// <summary>
    /// Menambahkan teks ke output saat ini. Menghormati bendera keluaran yang diaktifkan/dinonaktifkan.
    /// </summary>
    private void AppendText(string text)
    {
        if (!mIsSkipText)
        {
            mBuilder.AppendLine(text);
        }
    }

    /// <summary>
    /// Dipanggil ketika node RichText ditemui dalam dokumen.
    /// </summary>
    public override void VisitRichTextStart(RichText run)
    {
        ++nodecount;
        AppendText(run.Text);
    }

    /// <summary>
    /// Dipanggil ketika simpul Dokumen ditemui dalam dokumen.
    /// </summary>
    public override void VisitDocumentStart(Document document)
    {
        ++nodecount;
    }

    /// <summary>
    /// Dipanggil saat simpul Halaman ditemui dalam dokumen.
    /// </summary>
    public override void VisitPageStart(Page page)
    {
        ++nodecount;
        this.AppendText($"*** Page '{page.Title?.TitleText?.Text ?? "(no title)"}' ***");
    }

    /// <summary>
    /// Dipanggil saat pemrosesan simpul Halaman selesai.
    /// </summary>
    public override void VisitPageEnd(Page page)
    {
        this.AppendText(string.Empty);
    }

    /// <summary>
    /// Dipanggil ketika simpul Judul ditemui dalam dokumen.
    /// </summary>
    public override void VisitTitleStart(Title title)
    {
        ++nodecount;
    }

    /// <summary>
    /// Dipanggil ketika simpul Gambar ditemui dalam dokumen.
    /// </summary>
    public override void VisitImageStart(Image image)
    {
        ++nodecount;
    }

    /// <summary>
    /// Dipanggil ketika simpul OutlineGroup ditemui dalam dokumen.
    /// </summary>
    public override void VisitOutlineGroupStart(OutlineGroup outlineGroup)
    {
        ++nodecount;
    }

    /// <summary>
    /// Dipanggil saat node Outline ditemukan dalam dokumen.
    /// </summary>
    public override void VisitOutlineStart(Outline outline)
    {
        ++nodecount;
    }

    /// <summary>
    /// Dipanggil saat node OutlineElement ditemui di dokumen.
    /// </summary>
    public override void VisitOutlineElementStart(OutlineElement outlineElement)
    {
        ++nodecount;
    }

    /// <summary>
    /// Mendapatkan jumlah total node oleh Pengunjung
    /// </summary>
    public Int32 NodeCount
    {
        get { return this.nodecount; }
    }

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

Lihat juga