DocumentVisitor

DocumentVisitor class

الفئة الأساسية لزوار المستندات المخصصة.

لمعرفة المزيد، قم بزيارةنموذج كائن مستند Aspose.Words (DOM) مقالة توثيقية.

public abstract class DocumentVisitor

طُرق

اسموصف
virtual VisitAbsolutePositionTab(AbsolutePositionTab)تم الاتصال به عندما أAbsolutePositionTab تمت مصادفة عقدة في المستند.
virtual VisitBodyEnd(Body)يتم استدعاؤه عند انتهاء تعداد القصة النصية الرئيسية في القسم.
virtual VisitBodyStart(Body)يتم استدعاؤه عند بدء تعداد القصة النصية الرئيسية في القسم.
virtual VisitBookmarkEnd(BookmarkEnd)يتم استدعاؤه عند مواجهة نهاية الإشارة المرجعية في المستند.
virtual VisitBookmarkStart(BookmarkStart)يتم استدعاؤه عند مواجهة بداية إشارة مرجعية في المستند.
virtual VisitBuildingBlockEnd(BuildingBlock)يتم استدعاؤه عند انتهاء تعداد الكتلة البرمجية الإنشائية.
virtual VisitBuildingBlockStart(BuildingBlock)يتم استدعاؤه عند بدء تعداد الكتلة البرمجية الإنشائية.
virtual VisitCellEnd(Cell)يتم استدعاؤه عند انتهاء تعداد خلية الجدول.
virtual VisitCellStart(Cell)يتم استدعاؤه عند بدء تعداد خلية الجدول.
virtual VisitCommentEnd(Comment)يتم الاتصال به عند انتهاء تعداد نص التعليق.
virtual VisitCommentRangeEnd(CommentRangeEnd)يتم استدعاؤه عند مواجهة نهاية نطاق النص الذي تم التعليق عليه.
virtual VisitCommentRangeStart(CommentRangeStart)يتم استدعاؤه عند مواجهة بداية نطاق النص الذي تم التعليق عليه.
virtual VisitCommentStart(Comment)يتم الاتصال به عند بدء تعداد نص التعليق.
virtual VisitDocumentEnd(Document)يتم الاتصال به عند انتهاء تعداد المستند.
virtual VisitDocumentStart(Document)يتم الاتصال به عند بدء تعداد المستند.
virtual VisitEditableRangeEnd(EditableRangeEnd)يتم استدعاؤه عند مواجهة نهاية نطاق قابل للتحرير في المستند.
virtual VisitEditableRangeStart(EditableRangeStart)يتم استدعاؤه عند مواجهة بداية نطاق قابل للتحرير في المستند.
virtual VisitFieldEnd(FieldEnd)يتم استدعاؤه عندما ينتهي الحقل في المستند.
virtual VisitFieldSeparator(FieldSeparator)يتم استدعاؤه عند مواجهة فاصل حقل في المستند.
virtual VisitFieldStart(FieldStart)يتم استدعاؤه عند بدء حقل في المستند.
virtual VisitFootnoteEnd(Footnote)يتم استدعاؤه عند انتهاء تعداد نص الحاشية السفلية أو التعليق الختامي.
virtual VisitFootnoteStart(Footnote)يتم استدعاؤه عند بدء تعداد نص الحاشية السفلية أو التعليق الختامي.
virtual VisitFormField(FormField)يتم استدعاؤه عند مواجهة حقل نموذج في المستند.
virtual VisitGlossaryDocumentEnd(GlossaryDocument)يتم استدعاؤه عند انتهاء تعداد مستند المسرد.
virtual VisitGlossaryDocumentStart(GlossaryDocument)يتم استدعاؤه عند بدء تعداد مستند المسرد.
virtual VisitGroupShapeEnd(GroupShape)يتم استدعاؤه عند انتهاء تعداد شكل المجموعة.
virtual VisitGroupShapeStart(GroupShape)يتم استدعاؤه عند بدء تعداد شكل المجموعة.
virtual VisitHeaderFooterEnd(HeaderFooter)يتم استدعاؤه عند انتهاء تعداد الرأس أو التذييل في القسم.
virtual VisitHeaderFooterStart(HeaderFooter)يتم استدعاؤه عند بدء تعداد الرأس أو التذييل في القسم.
virtual VisitOfficeMathEnd(OfficeMath)يتم استدعاؤه عند انتهاء تعداد كائن Office Math.
virtual VisitOfficeMathStart(OfficeMath)يتم استدعاؤه عند بدء تعداد كائن Office Math.
virtual VisitParagraphEnd(Paragraph)يتم استدعاؤه عند انتهاء تعداد الفقرة.
virtual VisitParagraphStart(Paragraph)يتم استدعاؤه عند بدء تعداد الفقرة.
virtual VisitRowEnd(Row)يتم استدعاؤه عند انتهاء تعداد صف الجدول.
virtual VisitRowStart(Row)يتم استدعاؤه عند بدء تعداد صف الجدول.
virtual VisitRun(Run)يتم الاتصال به عند مواجهة سلسلة من النص في.
virtual VisitSectionEnd(Section)يتم استدعاؤه عند انتهاء تعداد القسم.
virtual VisitSectionStart(Section)يتم استدعاؤه عند بدء تعداد القسم.
virtual VisitShapeEnd(Shape)يتم استدعاؤه عند انتهاء تعداد الشكل.
virtual VisitShapeStart(Shape)يتم استدعاؤه عند بدء تعداد الشكل.
virtual VisitSmartTagEnd(SmartTag)يتم الاتصال به عند انتهاء تعداد العلامة الذكية.
virtual VisitSmartTagStart(SmartTag)يتم الاتصال به عند بدء تعداد العلامة الذكية.
virtual VisitSpecialChar(SpecialChar)تم الاتصال به عندما أSpecialChar تمت مصادفة عقدة في المستند.
virtual VisitStructuredDocumentTagEnd(StructuredDocumentTag)يتم استدعاؤه عند انتهاء تعداد علامة المستند المنظمة.
virtual VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd)يتم استدعاؤه عند مواجهة StructuredDocumentTagRangeEnd.
virtual VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart)يتم استدعاؤه عند مواجهة StructuredDocumentTagRangeStart.
virtual VisitStructuredDocumentTagStart(StructuredDocumentTag)يتم استدعاؤه عند بدء تعداد علامة المستند المنظمة.
virtual VisitSubDocument(SubDocument)يتم الاتصال به عند مواجهة مستند فرعي.
virtual VisitTableEnd(Table)يتم استدعاؤه عند انتهاء تعداد الجدول.
virtual VisitTableStart(Table)يتم استدعاؤه عند بدء تعداد الجدول.

ملاحظات

معDocumentVisitor يمكنك تحديد وتنفيذ العمليات المخصصة التي تتطلب التعداد فوق شجرة المستندات.

على سبيل المثال، يستخدم Aspose.WordsDocumentVisitor داخليا للحفظDocument بتنسيقات مختلفة ولعمليات أخرى مثل البحث عن الحقول أو الإشارات المرجعية فوق جزء من المستند.

ليستخدمDocumentVisitor:

  1. إنشاء فئة مشتقة منDocumentVisitor.
  2. تجاوز وتوفير تطبيقات لبعض أو كل طرق VisitXXX لتنفيذ بعض العمليات المخصصة.
  3. يتصلالعقدة. قبول على الNode that الذي تريد بدء التعداد منه.

DocumentVisitor يوفر تطبيقات افتراضية لجميع أساليب VisitXXX لتسهيل إنشاء زوار مستند جدد حيث يلزم تجاوز الطرق المطلوبة لزائر معين فقط. ليس من الضروري تجاوز كافة أساليب الزائر.

لمزيد من المعلومات، راجع نمط تصميم الزائر.

أمثلة

يوضح كيفية استخدام زائر المستند لطباعة بنية عقدة المستند.

public void DocStructureToText()
{
    Document doc = new Document(MyDir + "DocumentVisitor-compatible features.docx");
    DocStructurePrinter visitor = new DocStructurePrinter();

    // عندما نحصل على عقدة مركبة لقبول زائر المستند، يقوم الزائر بزيارة العقدة المقبولة،
    // ثم يجتاز جميع أبناء العقدة بطريقة العمق الأول.
    // يمكن للزائر قراءة وتعديل كل عقدة تمت زيارتها.
    doc.Accept(visitor);

    Console.WriteLine(visitor.GetText());
}

/// <summary>
/// يجتاز شجرة العقدة من العقد الفرعية.
/// ينشئ خريطة لهذه الشجرة على شكل سلسلة.
/// </summary>
public class DocStructurePrinter : DocumentVisitor
{
    public DocStructurePrinter()
    {
        mAcceptingNodeChildTree = new StringBuilder();
    }

    public string GetText()
    {
        return mAcceptingNodeChildTree.ToString();
    }

    /// <summary>
    /// يتم الاتصال به عند مواجهة عقدة مستند.
    /// </summary>
    public override VisitorAction VisitDocumentStart(Document doc)
    {
        int childNodeCount = doc.GetChildNodes(NodeType.Any, true).Count;

        IndentAndAppendLine("[Document start] Child nodes: " + childNodeCount);
        mDocTraversalDepth++;

        // السماح للزائر بمواصلة زيارة العقد الأخرى.
        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم الاتصال به بعد زيارة جميع العقد التابعة لعقدة المستند.
    /// </summary>
    public override VisitorAction VisitDocumentEnd(Document doc)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Document end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم الاتصال به عند مواجهة عقدة القسم في المستند.
    /// </summary>
    public override VisitorAction VisitSectionStart(Section section)
    {
        // احصل على فهرس قسمنا داخل المستند.
        NodeCollection docSections = section.Document.GetChildNodes(NodeType.Section, false);
        int sectionIndex = docSections.IndexOf(section);

        IndentAndAppendLine("[Section start] Section index: " + sectionIndex);
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم الاتصال به بعد زيارة جميع العقد التابعة لعقدة القسم.
    /// </summary>
    public override VisitorAction VisitSectionEnd(Section section)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Section end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم الاتصال به عند مواجهة عقدة النص في المستند.
    /// </summary>
    public override VisitorAction VisitBodyStart(Body body)
    {
        int paragraphCount = body.Paragraphs.Count;
        IndentAndAppendLine("[Body start] Paragraphs: " + paragraphCount);
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم الاتصال به بعد زيارة جميع العقد التابعة للعقدة الأساسية.
    /// </summary>
    public override VisitorAction VisitBodyEnd(Body body)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Body end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم استدعاؤه عند مواجهة عقدة فقرة في المستند.
    /// </summary>
    public override VisitorAction VisitParagraphStart(Paragraph paragraph)
    {
        IndentAndAppendLine("[Paragraph start]");
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم الاتصال به بعد زيارة جميع العقد التابعة لعقدة الفقرة.
    /// </summary>
    public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Paragraph end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم الاتصال به عند مواجهة عقدة التشغيل في المستند.
    /// </summary>
    public override VisitorAction VisitRun(Run run)
    {
        IndentAndAppendLine("[Run] \"" + run.GetText() + "\"");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم الاتصال به عند مواجهة عقدة مستند فرعي في المستند.
    /// </summary>
    public override VisitorAction VisitSubDocument(SubDocument subDocument)
    {
        IndentAndAppendLine("[SubDocument]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// ألحق سطرًا بـ StringBuilder وقم بوضع مسافة بادئة له اعتمادًا على مدى عمق الزائر في شجرة المستندات.
    /// </summary>
    /// <param name="text"></param>
    private void IndentAndAppendLine(string text)
    {
        for (int i = 0; i < mDocTraversalDepth; i++) mAcceptingNodeChildTree.Append("|  ");

        mAcceptingNodeChildTree.AppendLine(text);
    }

    private int mDocTraversalDepth;
    private readonly StringBuilder mAcceptingNodeChildTree;
}

أنظر أيضا