DocumentVisitor

DocumentVisitor class

Classe base per visitatori di documenti personalizzati.

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

public abstract class DocumentVisitor

Metodi

NomeDescrizione
virtual VisitAbsolutePositionTab(AbsolutePositionTab)Chiamato quando aAbsolutePositionTab è stato rilevato un nodo nel documento.
virtual VisitBodyEnd(Body)Chiamato al termine dell’enumerazione della storia di testo principale in una sezione.
virtual VisitBodyStart(Body)Chiamato quando è iniziata l’enumerazione del brano di testo principale 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 al termine dell’enumerazione di un blocco predefinito.
virtual VisitBuildingBlockStart(BuildingBlock)Chiamato quando è iniziata l’enumerazione di un blocco predefinito.
virtual VisitCellEnd(Cell)Chiamato al termine dell’enumerazione di una cella di tabella.
virtual VisitCellStart(Cell)Chiamato quando è iniziata l’enumerazione di una cella di tabella.
virtual VisitCommentEnd(Comment)Chiamato al termine dell’enumerazione del testo di un commento.
virtual VisitCommentRangeEnd(CommentRangeEnd)Chiamato quando viene raggiunta la fine di un intervallo di testo commentato.
virtual VisitCommentRangeStart(CommentRangeStart)Chiamato quando viene incontrato l’inizio di un intervallo di testo commentato.
virtual VisitCommentStart(Comment)Chiamato quando è iniziata l’enumerazione del testo di un commento.
virtual VisitDocumentEnd(Document)Chiamato al termine dell’enumerazione del documento.
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 nel documento viene rilevato un separatore di campo.
virtual VisitFieldStart(FieldStart)Chiamato quando inizia un campo nel documento.
virtual VisitFootnoteEnd(Footnote)Chiamato al termine dell’enumerazione del testo di una nota a piè di pagina o di chiusura.
virtual VisitFootnoteStart(Footnote)Chiamato quando è iniziata l’enumerazione del testo di una nota a piè di pagina o di chiusura.
virtual VisitFormField(FormField)Chiamato quando nel documento viene rilevato un campo modulo.
virtual VisitGlossaryDocumentEnd(GlossaryDocument)Chiamato al termine dell’enumerazione di un documento di glossario.
virtual VisitGlossaryDocumentStart(GlossaryDocument)Chiamato quando è iniziata l’enumerazione di un documento di glossario.
virtual VisitGroupShapeEnd(GroupShape)Chiamato al termine dell’enumerazione di una forma di gruppo.
virtual VisitGroupShapeStart(GroupShape)Chiamato quando è iniziata l’enumerazione di una forma di gruppo.
virtual VisitHeaderFooterEnd(HeaderFooter)Chiamato al termine dell’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 al termine dell’enumerazione di un oggetto Office Math.
virtual VisitOfficeMathStart(OfficeMath)Chiamato all’avvio dell’enumerazione di un oggetto Office Math.
virtual VisitParagraphEnd(Paragraph)Chiamato al termine dell’enumerazione di un paragrafo.
virtual VisitParagraphStart(Paragraph)Chiamato quando è iniziata l’enumerazione di un paragrafo.
virtual VisitRowEnd(Row)Chiamato al termine dell’enumerazione di una riga della tabella.
virtual VisitRowStart(Row)Chiamato quando è iniziata l’enumerazione di una riga della tabella.
virtual VisitRun(Run)Chiamato quando viene rilevata una sequenza di testo nel file.
virtual VisitSectionEnd(Section)Chiamato al termine dell’enumerazione di una sezione.
virtual VisitSectionStart(Section)Chiamato quando è iniziata l’enumerazione di una sezione.
virtual VisitShapeEnd(Shape)Chiamato al termine dell’enumerazione di una forma.
virtual VisitShapeStart(Shape)Chiamato quando è iniziata l’enumerazione di una forma.
virtual VisitSmartTagEnd(SmartTag)Chiamato al termine dell’enumerazione di uno smart tag.
virtual VisitSmartTagStart(SmartTag)Chiamato quando è iniziata l’enumerazione di uno smart tag.
virtual VisitSpecialChar(SpecialChar)Chiamato quando aSpecialChar è stato rilevato un nodo nel documento.
virtual VisitStructuredDocumentTagEnd(StructuredDocumentTag)Chiamato al termine dell’enumerazione di un tag di documento strutturato.
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 incontrato un documento secondario.
virtual VisitTableEnd(Table)Chiamato al termine dell’enumerazione di una tabella.
virtual VisitTableStart(Table)Chiamato quando è iniziata l’enumerazione di una tabella.

Osservazioni

ConDocumentVisitor è possibile definire ed eseguire operazioni personalizzate che richiedono l’enumerazione nell’albero del documento.

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

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 richiesti per il particolare visitatore . Non è necessario sovrascrivere tutti i metodi del visitatore.

Per ulteriori informazioni vedere il modello di progettazione Visitor.

Esempi

Mostra come utilizzare un visitatore di documento per stampare la struttura del nodo di un documento.

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

    // Quando facciamo in modo che un nodo composito accetti un visitatore del documento, il visitatore visita il nodo accettante,
    // e poi attraversa tutti i figli del nodo in modo approfondito.
    // Il visitatore può leggere e modificare ogni nodo visitato.
    doc.Accept(visitor);

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

/// <summary>
/// Attraversa l'albero dei nodi figli 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 incontrato 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 tutti i nodi figli di un nodo Documento sono stati visitati.
    /// </summary>
    public override VisitorAction VisitDocumentEnd(Document doc)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Document end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato quando nel documento viene incontrato 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 tutti i nodi figli di un nodo Sezione sono stati visitati.
    /// </summary>
    public override VisitorAction VisitSectionEnd(Section section)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Section end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Chiamato quando nel documento viene incontrato 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 tutti i nodi figli di un nodo Body sono stati visitati.
    /// </summary>
    public override VisitorAction VisitBodyEnd(Body body)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Body end]");

        return VisitorAction.Continue;
    }

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

        return VisitorAction.Continue;
    }

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

        return VisitorAction.Continue;
    }

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

        return VisitorAction.Continue;
    }

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

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Aggiunge una riga allo StringBuilder e la rientra in base alla profondità con 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