DocumentVisitor

DocumentVisitor class

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

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

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 لتسهيل إنشاء زوار مستندات جدد، حيث يجب فقط تجاوز الطرق المطلوبة للزائر particular . ليس من الضروري تجاوز جميع طرق الزائر.

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

أمثلة

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

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>
    /// يتم استدعاؤها عند مواجهة عقدة SubDocument في المستند.
    /// </summary>
    public override VisitorAction VisitSubDocument(SubDocument subDocument)
    {
        IndentAndAppendLine("[SubDocument]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم استدعاؤها عند مواجهة عقدة SubDocument في المستند.
    /// </summary>
    public override VisitorAction VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart sdtRangeStart)
    {
        IndentAndAppendLine("[SdtRangeStart]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// يتم استدعاؤها عند مواجهة عقدة SubDocument في المستند.
    /// </summary>
    public override VisitorAction VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd sdtRangeEnd)
    {
        IndentAndAppendLine("[SdtRangeEnd]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// أضف سطرًا إلى StringBuilder وقم بتدويره وفقًا لمدى عمق الزائر في شجرة المستند.
    /// </summary>
    /// <اسم المعلمة="نص"></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;
}

أنظر أيضا