DocumentVisitor

DocumentVisitor class

Clase base para visitantes de documentos personalizados.

Para obtener más información, visite elModelo de objetos de documento (DOM) de Aspose.Words artículo de documentación.

public abstract class DocumentVisitor

Métodos

NombreDescripción
virtual VisitAbsolutePositionTab(AbsolutePositionTab)Llamado cuando unAbsolutePositionTab Se encuentra un nodo en el documento.
virtual VisitBodyEnd(Body)Se llama cuando finaliza la enumeración de la historia del texto principal en una sección.
virtual VisitBodyStart(Body)Se llama cuando ha comenzado la enumeración de la historia del texto principal en una sección.
virtual VisitBookmarkEnd(BookmarkEnd)Se llama cuando se encuentra el final de un marcador en el documento.
virtual VisitBookmarkStart(BookmarkStart)Se llama cuando se encuentra el inicio de un marcador en el documento.
virtual VisitBuildingBlockEnd(BuildingBlock)Se llama cuando finaliza la enumeración de un bloque de construcción.
virtual VisitBuildingBlockStart(BuildingBlock)Se llama cuando ha comenzado la enumeración de un bloque de construcción.
virtual VisitCellEnd(Cell)Se llama cuando finaliza la enumeración de una celda de la tabla.
virtual VisitCellStart(Cell)Se llama cuando ha comenzado la enumeración de una celda de la tabla.
virtual VisitCommentEnd(Comment)Se llama cuando finaliza la enumeración de un texto de comentario.
virtual VisitCommentRangeEnd(CommentRangeEnd)Se llama cuando se encuentra el final de un rango de texto comentado.
virtual VisitCommentRangeStart(CommentRangeStart)Se llama cuando se encuentra el inicio de un rango de texto comentado.
virtual VisitCommentStart(Comment)Se llama cuando ha comenzado la enumeración de un texto de comentario.
virtual VisitDocumentEnd(Document)Se llama cuando finaliza la enumeración del documento.
virtual VisitDocumentStart(Document)Se llama cuando ha comenzado la enumeración del documento.
virtual VisitEditableRangeEnd(EditableRangeEnd)Se llama cuando se encuentra el final de un rango editable en el documento.
virtual VisitEditableRangeStart(EditableRangeStart)Se llama cuando se encuentra el inicio de un rango editable en el documento.
virtual VisitFieldEnd(FieldEnd)Se llama cuando un campo termina en el documento.
virtual VisitFieldSeparator(FieldSeparator)Se llama cuando se encuentra un separador de campo en el documento.
virtual VisitFieldStart(FieldStart)Se llama cuando comienza un campo en el documento.
virtual VisitFootnoteEnd(Footnote)Se llama cuando finaliza la enumeración de una nota al pie o del texto de una nota al final.
virtual VisitFootnoteStart(Footnote)Se llama cuando ha comenzado la enumeración de una nota al pie o del texto de una nota al final.
virtual VisitFormField(FormField)Se llama cuando se encuentra un campo de formulario en el documento.
virtual VisitGlossaryDocumentEnd(GlossaryDocument)Se llama cuando finaliza la enumeración de un documento de glosario.
virtual VisitGlossaryDocumentStart(GlossaryDocument)Se llama cuando ha comenzado la enumeración de un documento de glosario.
virtual VisitGroupShapeEnd(GroupShape)Se llama cuando finaliza la enumeración de una forma de grupo.
virtual VisitGroupShapeStart(GroupShape)Se llama cuando ha comenzado la enumeración de una forma de grupo.
virtual VisitHeaderFooterEnd(HeaderFooter)Se llama cuando finaliza la enumeración de un encabezado o pie de página en una sección.
virtual VisitHeaderFooterStart(HeaderFooter)Se llama cuando ha comenzado la enumeración de un encabezado o pie de página en una sección.
virtual VisitOfficeMathEnd(OfficeMath)Se llama cuando finaliza la enumeración de un objeto de Office Math.
virtual VisitOfficeMathStart(OfficeMath)Se llama cuando ha comenzado la enumeración de un objeto de Office Math.
virtual VisitParagraphEnd(Paragraph)Se llama cuando finaliza la enumeración de un párrafo.
virtual VisitParagraphStart(Paragraph)Se llama cuando ha comenzado la enumeración de un párrafo.
virtual VisitRowEnd(Row)Se llama cuando finaliza la enumeración de una fila de la tabla.
virtual VisitRowStart(Row)Se llama cuando ha comenzado la enumeración de una fila de la tabla.
virtual VisitRun(Run)Se llama cuando se encuentra una serie de texto en el.
virtual VisitSectionEnd(Section)Se llama cuando finaliza la enumeración de una sección.
virtual VisitSectionStart(Section)Se llama cuando ha comenzado la enumeración de una sección.
virtual VisitShapeEnd(Shape)Se llama cuando finaliza la enumeración de una forma.
virtual VisitShapeStart(Shape)Se llama cuando ha comenzado la enumeración de una forma.
virtual VisitSmartTagEnd(SmartTag)Se llama cuando finaliza la enumeración de una etiqueta inteligente.
virtual VisitSmartTagStart(SmartTag)Se llama cuando ha comenzado la enumeración de una etiqueta inteligente.
virtual VisitSpecialChar(SpecialChar)Llamado cuando unSpecialChar Se encuentra un nodo en el documento.
virtual VisitStructuredDocumentTagEnd(StructuredDocumentTag)Se llama cuando finaliza la enumeración de una etiqueta de documento estructurado.
virtual VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd)Se llama cuando se encuentra StructuredDocumentTagRangeEnd.
virtual VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart)Se llama cuando se encuentra StructuredDocumentTagRangeStart.
virtual VisitStructuredDocumentTagStart(StructuredDocumentTag)Se llama cuando ha comenzado la enumeración de una etiqueta de documento estructurado.
virtual VisitSubDocument(SubDocument)Se llama cuando se encuentra un subdocumento.
virtual VisitTableEnd(Table)Se llama cuando finaliza la enumeración de una tabla.
virtual VisitTableStart(Table)Se llama cuando ha comenzado la enumeración de una tabla.

Observaciones

ConDocumentVisitor puede definir y ejecutar operaciones personalizadas que requieren enumeración en el árbol del documento.

Por ejemplo, Aspose.Words usaDocumentVisitor internamente para guardarDocument en varios formatos y para otras operaciones como buscar campos o marcadores sobre un fragmento de un documento.

UsarDocumentVisitor:

  1. Crear una clase derivada deDocumentVisitor.
  2. Anule y proporcione implementaciones para algunos o todos los métodos de VisitXXX para realizar algunas operaciones personalizadas.
  3. LlamarNodo.Aceptar sobre elNode that desde donde desea iniciar la enumeración.

DocumentVisitor proporciona implementaciones predeterminadas para todos los métodos de VisitXXX para facilitar la creación de nuevos visitantes de documentos, ya que solo es necesario anular los métodos necesarios para el visitante particular. No es necesario anular todos los métodos de visitante.

Para obtener más información, consulte el patrón de diseño de visitante.

Ejemplos

Muestra cómo utilizar un visitante de documentos para imprimir la estructura de nodos de un documento.

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

    // Cuando conseguimos que un nodo compuesto acepte un visitante del documento, el visitante visita el nodo receptor,
    // y luego atraviesa todos los hijos del nodo en profundidad.
    // El visitante puede leer y modificar cada nodo visitado.
    doc.Accept(visitor);

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

/// <summary>
/// Atraviesa el árbol de nodos secundarios de un nodo.
/// Crea un mapa de este árbol en forma de cadena.
/// </summary>
public class DocStructurePrinter : DocumentVisitor
{
    public DocStructurePrinter()
    {
        mAcceptingNodeChildTree = new StringBuilder();
    }

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

    /// <summary>
    /// Se llama cuando se encuentra 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++;

        // Permitir que el visitante continúe visitando otros nodos.
        return VisitorAction.Continue;
    }

    /// <summary>
    /// Se llama después de que se hayan visitado todos los nodos secundarios de un nodo de documento.
    /// </summary>
    public override VisitorAction VisitDocumentEnd(Document doc)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Document end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Se llama cuando se encuentra un nodo de Sección en el documento.
    /// </summary>
    public override VisitorAction VisitSectionStart(Section section)
    {
        // Obtener el índice de nuestra sección dentro 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>
    /// Se llama después de que se hayan visitado todos los nodos secundarios de un nodo de Sección.
    /// </summary>
    public override VisitorAction VisitSectionEnd(Section section)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Section end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Se llama cuando se encuentra un nodo Cuerpo en el documento.
    /// </summary>
    public override VisitorAction VisitBodyStart(Body body)
    {
        int paragraphCount = body.Paragraphs.Count;
        IndentAndAppendLine("[Body start] Paragraphs: " + paragraphCount);
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Se llama después de que se hayan visitado todos los nodos secundarios de un nodo Body.
    /// </summary>
    public override VisitorAction VisitBodyEnd(Body body)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Body end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Se llama cuando se encuentra un nodo Párrafo en el documento.
    /// </summary>
    public override VisitorAction VisitParagraphStart(Paragraph paragraph)
    {
        IndentAndAppendLine("[Paragraph start]");
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Se llama después de que se hayan visitado todos los nodos secundarios de un nodo de párrafo.
    /// </summary>
    public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Paragraph end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Se llama cuando se encuentra un nodo Ejecutar en el documento.
    /// </summary>
    public override VisitorAction VisitRun(Run run)
    {
        IndentAndAppendLine("[Run] \"" + run.GetText() + "\"");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Se llama cuando se encuentra un nodo SubDocumento en el documento.
    /// </summary>
    public override VisitorAction VisitSubDocument(SubDocument subDocument)
    {
        IndentAndAppendLine("[SubDocument]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Agrega una línea al StringBuilder y sangra dependiendo de qué tan profundo esté el visitante en el árbol del documento.
    /// </summary>
    /// <param nombre="texto"></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;
}

Ver también