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.Words используетDocumentVisitor внутренне для экономии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>
    /// Вызывается после посещения всех дочерних узлов узла Document.
    /// </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>
    /// Вызывается после посещения всех дочерних узлов узла Section.
    /// </summary>
    public override VisitorAction VisitSectionEnd(Section section)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Section end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Вызывается, когда в документе встречается узел Body.
    /// </summary>
    public override VisitorAction VisitBodyStart(Body body)
    {
        int paragraphCount = body.Paragraphs.Count;
        IndentAndAppendLine("[Body start] Paragraphs: " + paragraphCount);
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Вызывается после посещения всех дочерних узлов узла Body.
    /// </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>
    /// Вызывается после посещения всех дочерних узлов узла Paragraph.
    /// </summary>
    public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Paragraph end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Вызывается, когда в документе встречается узел Run.
    /// </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 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;
}

Смотрите также