DocumentVisitor

DocumentVisitor class

Classe base per i visitatori di documenti personalizzati.

Per saperne di più, visita ilModello a oggetti del documento (DOM) di Aspose.Words articolo di documentazione.

public abstract class DocumentVisitor

Metodi

NomeDescrizione
virtual VisitAbsolutePositionTab(AbsolutePositionTab)Chiamato quando unAbsolutePositionTab il nodo è stato riscontrato nel documento.
virtual VisitBodyEnd(Body)Chiamato quando l’enumerazione del testo principale della storia in una sezione è terminata.
virtual VisitBodyStart(Body)Chiamato quando è iniziata l’enumerazione del testo principale della storia in una sezione.
virtual VisitBookmarkEnd(BookmarkEnd)Chiamato quando nel documento viene rilevata la fine di un segnalibro.
virtual VisitBookmarkStart(BookmarkStart)Chiamato quando nel documento viene rilevato l’inizio di un segnalibro.
virtual VisitBuildingBlockEnd(BuildingBlock)Chiamato quando l’enumerazione di un blocco di costruzione è terminata.
virtual VisitBuildingBlockStart(BuildingBlock)Chiamato quando è iniziata l’enumerazione di un blocco di costruzione.
virtual VisitCellEnd(Cell)Chiamato quando l’enumerazione di una cella della tabella è terminata.
virtual VisitCellStart(Cell)Chiamato quando è iniziata l’enumerazione di una cella della tabella.
virtual VisitCommentEnd(Comment)Chiamato quando l’enumerazione di un testo di commento è terminata.
virtual VisitCommentRangeEnd(CommentRangeEnd)Chiamato quando viene rilevata la fine di un intervallo di testo commentato.
virtual VisitCommentRangeStart(CommentRangeStart)Chiamato quando viene rilevato l’inizio di un intervallo di testo commentato.
virtual VisitCommentStart(Comment)Chiamato quando è iniziata l’enumerazione di un testo di commento.
virtual VisitDocumentEnd(Document)Chiamato quando l’enumerazione del documento è terminata.
virtual VisitDocumentStart(Document)Chiamato quando è iniziata l’enumerazione del documento.
virtual VisitEditableRangeEnd(EditableRangeEnd)Chiamato quando nel documento viene rilevata la fine di un intervallo modificabile.
virtual VisitEditableRangeStart(EditableRangeStart)Chiamato quando nel documento viene rilevato l’inizio di un intervallo modificabile.
virtual VisitFieldEnd(FieldEnd)Chiamato quando un campo termina nel documento.
virtual VisitFieldSeparator(FieldSeparator)Chiamato quando viene rilevato un separatore di campo nel documento.
virtual VisitFieldStart(FieldStart)Chiamato quando un campo inizia nel documento.
virtual VisitFootnoteEnd(Footnote)Chiamato quando termina l’enumerazione di un testo di nota a piè di pagina o di nota di chiusura.
virtual VisitFootnoteStart(Footnote)Chiamato quando è iniziata l’enumerazione del testo di una nota a piè di pagina o di una nota di chiusura.
virtual VisitFormField(FormField)Chiamato quando viene rilevato un campo modulo nel documento.
virtual VisitGlossaryDocumentEnd(GlossaryDocument)Chiamato quando l’enumerazione di un documento di glossario è terminata.
virtual VisitGlossaryDocumentStart(GlossaryDocument)Chiamato quando è iniziata l’enumerazione di un documento di glossario.
virtual VisitGroupShapeEnd(GroupShape)Chiamato quando l’enumerazione di una forma di gruppo è terminata.
virtual VisitGroupShapeStart(GroupShape)Chiamato quando è iniziata l’enumerazione di una forma di gruppo.
virtual VisitHeaderFooterEnd(HeaderFooter)Chiamato quando termina l’enumerazione di un’intestazione o di un piè di pagina in una sezione.
virtual VisitHeaderFooterStart(HeaderFooter)Chiamato quando è iniziata l’enumerazione di un’intestazione o di un piè di pagina in una sezione.
virtual VisitOfficeMathEnd(OfficeMath)Chiamato quando l’enumerazione di un oggetto Office Math è terminata.
virtual VisitOfficeMathStart(OfficeMath)Chiamato quando è iniziata l’enumerazione di un oggetto Office Math.
virtual VisitParagraphEnd(Paragraph)Chiamato quando l’enumerazione di un paragrafo è terminata.
virtual VisitParagraphStart(Paragraph)Chiamato quando è iniziata l’enumerazione di un paragrafo.
virtual VisitRowEnd(Row)Chiamato quando l’enumerazione di una riga della tabella è terminata.
virtual VisitRowStart(Row)Chiamato quando è iniziata l’enumerazione di una riga della tabella.
virtual VisitRun(Run)Chiamato quando viene rilevata una sequenza di testo in .
virtual VisitSectionEnd(Section)Chiamato quando l’enumerazione di una sezione è terminata.
virtual VisitSectionStart(Section)Chiamato quando è iniziata l’enumerazione di una sezione.
virtual VisitShapeEnd(Shape)Chiamato quando l’enumerazione di una forma è terminata.
virtual VisitShapeStart(Shape)Chiamato quando è iniziata l’enumerazione di una forma.
virtual VisitSmartTagEnd(SmartTag)Chiamato quando l’enumerazione di uno smart tag è terminata.
virtual VisitSmartTagStart(SmartTag)Chiamato quando è iniziata l’enumerazione di uno smart tag.
virtual VisitSpecialChar(SpecialChar)Chiamato quando unSpecialChar il nodo è stato riscontrato nel documento.
virtual VisitStructuredDocumentTagEnd(StructuredDocumentTag)Chiamato quando l’enumerazione di un tag di documento strutturato è terminata.
virtual VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd)Chiamato quando viene rilevato un StructuredDocumentTagRangeEnd.
virtual VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart)Chiamato quando viene rilevato un StructuredDocumentTagRangeStart.
virtual VisitStructuredDocumentTagStart(StructuredDocumentTag)Chiamato quando è iniziata l’enumerazione di un tag di documento strutturato.
virtual VisitSubDocument(SubDocument)Chiamato quando viene rilevato un sottodocumento.
virtual VisitTableEnd(Table)Chiamato quando l’enumerazione di una tabella è terminata.
virtual VisitTableStart(Table)Chiamato quando è iniziata l’enumerazione di una tabella.

Osservazioni

ConDocumentVisitor è possibile definire ed eseguire operazioni personalizzate che richiedono l’enumerazione sull’albero dei documenti.

Ad esempio, Aspose.Words utilizzaDocumentVisitor internamente per il salvataggioDocument in vari formati e per altre operazioni come la ricerca di campi o segnalibri su un frammento di un documento.

Per usareDocumentVisitor:

  1. Crea una classe derivata daDocumentVisitor.
  2. Sostituisci e fornisci implementazioni per alcuni o tutti i metodi VisitXXX per eseguire alcune operazioni personalizzate.
  3. ChiamataNodo.Accetta sulNode that da cui vuoi iniziare l’enumerazione.

DocumentVisitor Fornisce implementazioni predefinite per tutti i metodi VisitXXX per semplificare la creazione di nuovi visitatori del documento, poiché è necessario sovrascrivere solo i metodi necessari per il particolare visitatore . Non è necessario sovrascrivere tutti i metodi del visitatore.

Per ulteriori informazioni, vedere il design pattern Visitor.

Esempi

Mostra come utilizzare un visitatore di documenti per stampare la struttura dei nodi di un documento.

public void DocStructureToText()
{
    Document doc = new Document(MyDir + "DocumentVisitor-compatible features.docx");
    DocStructurePrinter visitor = new DocStructurePrinter();

    // Quando otteniamo che un nodo composito accetti un visitatore del documento, il visitatore visita il nodo accettante,
    // e quindi attraversa tutti i nodi figlio in modalità depth-first.
    // Il visitatore può leggere e modificare ogni nodo visitato.
    doc.Accept(visitor);

    Console.WriteLine(visitor.GetText());
}

/// <summary>
/// Attraversa l'albero dei nodi figlio di un nodo.
/// Crea una mappa di questo albero sotto forma di stringa.
/// </summary>
public class DocStructurePrinter : DocumentVisitor
{
    public DocStructurePrinter()
    {
        mAcceptingNodeChildTree = new StringBuilder();
    }

    public string GetText()
    {
        return mAcceptingNodeChildTree.ToString();
    }

    /// <summary>
    /// Chiamato quando viene rilevato un nodo Documento.
    /// </summary>
    public override VisitorAction VisitDocumentStart(Document doc)
    {
        int childNodeCount = doc.GetChildNodes(NodeType.Any, true).Count;

        IndentAndAppendLine("[Document start] Child nodes: " + childNodeCount);
        mDocTraversalDepth++;

        // Consenti al visitatore di continuare a visitare altri nodi.
        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato dopo che sono stati visitati tutti i nodi figlio di un nodo Documento.
    /// </summary>
    public override VisitorAction VisitDocumentEnd(Document doc)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Document end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato quando nel documento viene rilevato un nodo Sezione.
    /// </summary>
    public override VisitorAction VisitSectionStart(Section section)
    {
        // Ottieni l'indice della nostra sezione all'interno del documento.
        NodeCollection docSections = section.Document.GetChildNodes(NodeType.Section, false);
        int sectionIndex = docSections.IndexOf(section);

        IndentAndAppendLine("[Section start] Section index: " + sectionIndex);
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato dopo che sono stati visitati tutti i nodi figlio di un nodo Sezione.
    /// </summary>
    public override VisitorAction VisitSectionEnd(Section section)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Section end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato quando nel documento viene rilevato un nodo Body.
    /// </summary>
    public override VisitorAction VisitBodyStart(Body body)
    {
        int paragraphCount = body.Paragraphs.Count;
        IndentAndAppendLine("[Body start] Paragraphs: " + paragraphCount);
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato dopo che sono stati visitati tutti i nodi figlio di un nodo Body.
    /// </summary>
    public override VisitorAction VisitBodyEnd(Body body)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Body end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato quando nel documento viene rilevato un nodo Paragrafo.
    /// </summary>
    public override VisitorAction VisitParagraphStart(Paragraph paragraph)
    {
        IndentAndAppendLine("[Paragraph start]");
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato dopo che sono stati visitati tutti i nodi figlio di un nodo Paragrafo.
    /// </summary>
    public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Paragraph end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato quando nel documento viene rilevato un nodo Run.
    /// </summary>
    public override VisitorAction VisitRun(Run run)
    {
        IndentAndAppendLine("[Run] \"" + run.GetText() + "\"");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato quando nel documento viene rilevato un nodo SubDocument.
    /// </summary>
    public override VisitorAction VisitSubDocument(SubDocument subDocument)
    {
        IndentAndAppendLine("[SubDocument]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato quando nel documento viene rilevato un nodo SubDocument.
    /// </summary>
    public override VisitorAction VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart sdtRangeStart)
    {
        IndentAndAppendLine("[SdtRangeStart]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato quando nel documento viene rilevato un nodo SubDocument.
    /// </summary>
    public override VisitorAction VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd sdtRangeEnd)
    {
        IndentAndAppendLine("[SdtRangeEnd]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Aggiungere una riga allo StringBuilder e rientrarla a seconda della profondità a cui si trova il visitatore nell'albero del documento.
    /// </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;
}

Guarda anche