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
:
- Создайте класс, производный от
DocumentVisitor
. - Переопределите и предоставьте реализации для некоторых или всех методов VisitXXX для выполнения некоторых пользовательских операций.
- Вызов
Узел.Принять
на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;
}
Смотрите также
- пространство имен Aspose.Words
- сборка Aspose.Words