DocumentVisitor

DocumentVisitor class

Basklass för anpassade dokumentbesökare.

För att lära dig mer, besökAspose.Words Document Object Model (DOM) dokumentationsartikel.

public abstract class DocumentVisitor

Metoder

namnBeskrivning
virtual VisitAbsolutePositionTab(AbsolutePositionTab)Ringde när enAbsolutePositionTab nod påträffas i dokumentet.
virtual VisitBodyEnd(Body)Anropas när uppräkningen av huvudtextberättelsen i ett avsnitt har avslutats.
virtual VisitBodyStart(Body)Anropas när uppräkningen av huvudtextberättelsen i ett avsnitt har börjat.
virtual VisitBookmarkEnd(BookmarkEnd)Anropas när slutet av ett bokmärke påträffas i dokumentet.
virtual VisitBookmarkStart(BookmarkStart)Anropas när en början av ett bokmärke påträffas i dokumentet.
virtual VisitBuildingBlockEnd(BuildingBlock)Anropas när uppräkningen av ett byggblock har avslutats.
virtual VisitBuildingBlockStart(BuildingBlock)Anropas när uppräkningen av ett byggblock har påbörjats.
virtual VisitCellEnd(Cell)Anropas när uppräkningen av en tabellcell har avslutats.
virtual VisitCellStart(Cell)Anropas när uppräkningen av en tabellcell har startat.
virtual VisitCommentEnd(Comment)Anropas när uppräkningen av en kommentarstext har avslutats.
virtual VisitCommentRangeEnd(CommentRangeEnd)Anropas när slutet av ett kommenterat textintervall påträffas.
virtual VisitCommentRangeStart(CommentRangeStart)Anropas när början av ett kommenterat textintervall påträffas.
virtual VisitCommentStart(Comment)Anropas när uppräkningen av en kommentarstext har börjat.
virtual VisitDocumentEnd(Document)Anropas när uppräkningen av dokumentet är klar.
virtual VisitDocumentStart(Document)Anropas när uppräkningen av dokumentet har påbörjats.
virtual VisitEditableRangeEnd(EditableRangeEnd)Anropas när ett slut på ett redigerbart område påträffas i dokumentet.
virtual VisitEditableRangeStart(EditableRangeStart)Anropas när en början av ett redigerbart område påträffas i dokumentet.
virtual VisitFieldEnd(FieldEnd)Anropas när ett fält slutar i dokumentet.
virtual VisitFieldSeparator(FieldSeparator)Anropas när en fältavgränsare påträffas i dokumentet.
virtual VisitFieldStart(FieldStart)Anropas när ett fält startar i dokumentet.
virtual VisitFootnoteEnd(Footnote)Anropas när uppräkningen av en fotnot eller slutnotstext har avslutats.
virtual VisitFootnoteStart(Footnote)Anropas när uppräkningen av en fotnot eller slutnotstext har börjat.
virtual VisitFormField(FormField)Anropas när ett formulärfält påträffas i dokumentet.
virtual VisitGlossaryDocumentEnd(GlossaryDocument)Anropas när uppräkningen av ett ordlistadokument har avslutats.
virtual VisitGlossaryDocumentStart(GlossaryDocument)Anropas när uppräkning av ett ordlistadokument har påbörjats.
virtual VisitGroupShapeEnd(GroupShape)Anropas när uppräkningen av en gruppform har avslutats.
virtual VisitGroupShapeStart(GroupShape)Anropas när uppräkningen av en gruppform har börjat.
virtual VisitHeaderFooterEnd(HeaderFooter)Anropas när uppräkningen av en sidhuvud eller sidfot i ett avsnitt har avslutats.
virtual VisitHeaderFooterStart(HeaderFooter)Anropas när uppräkningen av en sidhuvud eller sidfot i ett avsnitt har börjat.
virtual VisitOfficeMathEnd(OfficeMath)Anropas när uppräkningen av ett Office Math-objekt har avslutats.
virtual VisitOfficeMathStart(OfficeMath)Anropas när uppräkningen av ett Office Math-objekt har startat.
virtual VisitParagraphEnd(Paragraph)Anropas när uppräkningen av ett stycke har avslutats.
virtual VisitParagraphStart(Paragraph)Anropas när uppräkningen av ett stycke har börjat.
virtual VisitRowEnd(Row)Anropas när uppräkningen av en tabellrad har avslutats.
virtual VisitRowStart(Row)Anropas när uppräkningen av en tabellrad har påbörjats.
virtual VisitRun(Run)Anropas när en körning av text i den påträffas.
virtual VisitSectionEnd(Section)Anropas när uppräkningen av ett avsnitt har avslutats.
virtual VisitSectionStart(Section)Anropas när uppräkningen av ett avsnitt har börjat.
virtual VisitShapeEnd(Shape)Anropas när uppräkningen av en form har avslutats.
virtual VisitShapeStart(Shape)Anropas när uppräkningen av en form har börjat.
virtual VisitSmartTagEnd(SmartTag)Anropas när uppräkningen av en smart tagg har avslutats.
virtual VisitSmartTagStart(SmartTag)Anropas när uppräkningen av en smart tagg har börjat.
virtual VisitSpecialChar(SpecialChar)Ringde när enSpecialChar nod påträffas i dokumentet.
virtual VisitStructuredDocumentTagEnd(StructuredDocumentTag)Anropas när uppräkningen av en strukturerad dokumenttagg har avslutats.
virtual VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd)Anropas när ett StructuredDocumentTagRangeEnd påträffas.
virtual VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart)Anropas när en StructuredDocumentTagRangeStart påträffas.
virtual VisitStructuredDocumentTagStart(StructuredDocumentTag)Anropas när uppräkningen av en strukturerad dokumenttagg har startat.
virtual VisitSubDocument(SubDocument)Anropas när ett underdokument påträffas.
virtual VisitTableEnd(Table)Anropas när uppräkningen av en tabell är avslutad.
virtual VisitTableStart(Table)Anropas när uppräkningen av en tabell har påbörjats.

Anmärkningar

MedDocumentVisitor du kan definiera och köra anpassade operationer som kräver uppräkning över dokumentträdet.

Till exempel använder Aspose.WordsDocumentVisitor internt för att sparaDocument i olika format och för andra operationer som att hitta fält eller bokmärken över ett fragment av ett dokument.

Att användaDocumentVisitor:

  1. Skapa en klass som härrör frånDocumentVisitor.
  2. Åsidosätt och tillhandahåll implementeringar för några eller alla VisitXXX-metoderna för att utföra vissa anpassade operationer.
  3. Ring uppNode.AccepteraNode that du vill börja uppräkningen från.

DocumentVisitor tillhandahåller standardimplementeringar för alla VisitXXX-metoderna för att göra det enklare att skapa nya dokumentbesökare eftersom endast de metoder som krävs för den särskilda -besökaren behöver åsidosättas. Det är inte nödvändigt att åsidosätta alla besöksmetoder.

För mer information se Visitor design mönster.

Exempel

Visar hur man använder en dokumentbesökare för att skriva ut ett dokuments nodstruktur.

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

    // När vi får en sammansatt nod att acceptera en dokumentbesökare, besöker besökaren den accepterande noden,
    // och sedan korsar alla nodens barn på ett djup-först sätt.
    // Besökaren kan läsa och ändra varje besökt nod.
    doc.Accept(visitor);

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

/// <summary>
/// Går igenom en nods träd med undernoder.
/// Skapar en karta över detta träd i form av en sträng.
/// </summary>
public class DocStructurePrinter : DocumentVisitor
{
    public DocStructurePrinter()
    {
        mAcceptingNodeChildTree = new StringBuilder();
    }

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

    /// <summary>
    /// Anropas när en dokumentnod påträffas.
    /// </summary>
    public override VisitorAction VisitDocumentStart(Document doc)
    {
        int childNodeCount = doc.GetChildNodes(NodeType.Any, true).Count;

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

        // Tillåt besökaren att fortsätta besöka andra noder.
        return VisitorAction.Continue;
    }

    /// <summary>
    /// Anropas efter att alla undernoder i en dokumentnod har besökts.
    /// </summary>
    public override VisitorAction VisitDocumentEnd(Document doc)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Document end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Anropas när en sektionsnod påträffas i dokumentet.
    /// </summary>
    public override VisitorAction VisitSectionStart(Section section)
    {
        // Hämta indexet för vår sektion i dokumentet.
        NodeCollection docSections = section.Document.GetChildNodes(NodeType.Section, false);
        int sectionIndex = docSections.IndexOf(section);

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

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Anropas efter att alla undernoder i en sektionsnod har besökts.
    /// </summary>
    public override VisitorAction VisitSectionEnd(Section section)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Section end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Anropas när en Body-nod påträffas i dokumentet.
    /// </summary>
    public override VisitorAction VisitBodyStart(Body body)
    {
        int paragraphCount = body.Paragraphs.Count;
        IndentAndAppendLine("[Body start] Paragraphs: " + paragraphCount);
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Kallas efter att alla underordnade noder i en Kroppsnod har besökts.
    /// </summary>
    public override VisitorAction VisitBodyEnd(Body body)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Body end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Anropas när en Paragraph-nod påträffas i dokumentet.
    /// </summary>
    public override VisitorAction VisitParagraphStart(Paragraph paragraph)
    {
        IndentAndAppendLine("[Paragraph start]");
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Anropas efter att alla undernoder i en Paragraph-nod har besökts.
    /// </summary>
    public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Paragraph end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Anropas när en körnod påträffas i dokumentet.
    /// </summary>
    public override VisitorAction VisitRun(Run run)
    {
        IndentAndAppendLine("[Run] \"" + run.GetText() + "\"");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Anropas när en SubDocument-nod påträffas i dokumentet.
    /// </summary>
    public override VisitorAction VisitSubDocument(SubDocument subDocument)
    {
        IndentAndAppendLine("[SubDocument]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Lägg till en rad i StringBuilder och dra in den beroende på hur djupt besökaren befinner sig i dokumentträdet.
    /// </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;
}

Se även