الفئة 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 VisitInkDrawingEnd(InkDrawing)انتهاء زيارة عقدة InkDrawing.
virtual VisitInkDrawingStart(InkDrawing)بدء زيارة عقدة InkDrawing.
virtual VisitInkParagraphEnd(InkParagraph)انتهاء زيارة عقدة InkParagraph.
virtual VisitInkParagraphStart(InkParagraph)بدء زيارة عقدة InkParagraph.
virtual VisitInkWordEnd(InkWord)انتهاء زيارة عقدة InkWord.
virtual VisitInkWordStart(InkWord)بدء زيارة عقدة InkWord.
virtual VisitLoopEnd(Loop)انتهاء زيارة عقدة Loop.
virtual VisitLoopStart(Loop)بدء زيارة عقدة Loop.
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>
    /// يُستدعى عندما يتم العثور على عقدة RichText في المستند.
    /// </summary>
    public override void VisitRichTextStart(RichText run)
    {
        ++nodecount;
        AppendText(run.Text);
    }

    /// <summary>
    /// يُستدعى عندما يتم العثور على عقدة Document في المستند.
    /// </summary>
    public override void VisitDocumentStart(Document document)
    {
        ++nodecount;
    }

    /// <summary>
    /// يُستدعى عندما يتم العثور على عقدة Page في المستند.
    /// </summary>
    public override void VisitPageStart(Page page)
    {
        ++nodecount;
        this.AppendText($"*** Page '{page.Title?.TitleText?.Text ?? "(no title)"}' ***");
    }

    /// <summary>
    /// يُستدعى عند انتهاء معالجة عقدة Page.
    /// </summary>
    public override void VisitPageEnd(Page page)
    {
        this.AppendText(string.Empty);
    }

    /// <summary>
    /// يُستدعى عندما يتم العثور على عقدة Title في المستند.
    /// </summary>
    public override void VisitTitleStart(Title title)
    {
        ++nodecount;
    }

    /// <summary>
    /// يُستدعى عندما يتم العثور على عقدة Image في المستند.
    /// </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;
}

انظر أيضًا