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>
    /// Вызывается при обнаружении узла Document.
    /// </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>
    /// Вызывается после посещения всех дочерних узлов узла Раздела.
    /// </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>
    /// Добавляем строку к 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;
}

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