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>
/// Вызывается при обнаружении узла 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;
}
Смотрите также
- пространство имен Aspose.Words
- сборка Aspose.Words