DocumentVisitor

DocumentVisitor class

Classe base per visitatori di documenti personalizzati.

public abstract class DocumentVisitor

Metodi

Nome Descrizione
virtual VisitAbsolutePositionTab(AbsolutePositionTab) Chiamato quando aAbsolutePositionTab viene rilevato un nodo nel documento.
virtual VisitBodyEnd(Body) Chiamato quando l’enumerazione della storia di testo principale in una sezione è terminata.
virtual VisitBodyStart(Body) Chiamato quando è iniziata l’enumerazione della storia di testo principale in una sezione.
virtual VisitBookmarkEnd(BookmarkEnd) Chiamato quando viene rilevata la fine di un segnalibro nel documento.
virtual VisitBookmarkStart(BookmarkStart) Chiamato quando viene rilevato l’inizio di un segnalibro nel documento.
virtual VisitBuildingBlockEnd(BuildingBlock) Chiamato al termine dell’enumerazione di un building block.
virtual VisitBuildingBlockStart(BuildingBlock) Chiamato quando è iniziata l’enumerazione di un building block.
virtual VisitCellEnd(Cell) Chiamato quando l’enumerazione di una cella di tabella è terminata.
virtual VisitCellStart(Cell) Chiamato quando è iniziata l’enumerazione di una cella di 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 al termine dell’enumerazione del documento.
virtual VisitDocumentStart(Document) Chiamato quando è iniziata l’enumerazione del documento.
virtual VisitEditableRangeEnd(EditableRangeEnd) Chiamato quando viene rilevata la fine di un intervallo modificabile nel documento.
virtual VisitEditableRangeStart(EditableRangeStart) Chiamato quando viene rilevato l’inizio di un intervallo modificabile nel documento.
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 l’enumerazione di una nota a piè di pagina o del testo di una nota di chiusura è terminata.
virtual VisitFootnoteStart(Footnote) Chiamato quando è iniziata l’enumerazione di una nota a piè di pagina o del testo 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 del glossario è terminata.
virtual VisitGlossaryDocumentStart(GlossaryDocument) Chiamato quando è iniziata l’enumerazione di un documento del 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 l’enumerazione di un’intestazione o di un piè di pagina in una sezione è terminata.
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 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 di tabella è terminata.
virtual VisitRowStart(Row) Chiamato quando è iniziata l’enumerazione di una riga di 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 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 viene rilevato un nodo nel documento.
virtual VisitStructuredDocumentTagEnd(StructuredDocumentTag) Chiamato al termine dell’enumerazione di un tag di documento strutturato.
virtual VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd)
virtual VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart)
virtual VisitStructuredDocumentTagStart(StructuredDocumentTag) Chiamato quando è iniziata l’enumerazione di un tag di documento strutturato.
virtual VisitSubDocument(SubDocument) Chiamato quando viene rilevato un documento secondario.
virtual VisitTableEnd(Table) Chiamato quando l’enumerazione di una tabella è terminata.
virtual VisitTableStart(Table) Chiamato quando è iniziata l’enumerazione di una tabella.

Osservazioni

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

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

Usare DocumentVisitor:

  1. Crea una classe derivata da DocumentVisitor.
  2. Eseguire l’override e fornire implementazioni per alcuni o tutti i metodi VisitXXX per eseguire alcune operazioni personalizzate.
  3. ChiamataNodo.Accetta sul Nodo quel da cui vuoi iniziare l’enumerazione.

DocumentVisitorfornisce implementazioni predefinite per tutti i metodi VisitXXX per semplificare la creazione di nuovi visitatori di documenti poiché solo i metodi richiesti per il particolare visitatore devono essere sovrascritti. Non è necessario sovrascrivere tutti i metodi del visitatore.

Per ulteriori informazioni, vedere il modello di progettazione del visitatore.

Esempi

Mostra come utilizzare un visitatore del 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 otteniamo un nodo composito per accettare un visitatore del documento, il visitatore visita il nodo di accettazione,
    // e quindi 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 rilevato un nodo Document.
    /// </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 figlio di un nodo Document sono stati visitati.
    /// </summary>
    public override VisitorAction VisitDocumentEnd(Document doc)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Document end]");

        return VisitorAction.Continue;
    }

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

        return VisitorAction.Continue;
    }

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

        return VisitorAction.Continue;
    }

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

        return VisitorAction.Continue;
    }

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

        return VisitorAction.Continue;
    }

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

        return VisitorAction.Continue;
    }

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

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Aggiunge una riga a StringBuilder e la indenta in base alla profondità del visitatore nell'albero del documento.
    /// </summary>
    /// <nome parametro="testo"></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