Class DocumentVisitor

DocumentVisitor class

지정된 노드에서 루트가 있는 하위 트리를 통해 반복하기 위한 추상 클래스입니다.

public abstract class DocumentVisitor

행동 양식

이름설명
virtual VisitAttachedFileEnd(AttachedFile)방문 종료AttachedFile 노드.
virtual VisitAttachedFileStart(AttachedFile)방문 시작AttachedFile 노드.
virtual VisitDocumentEnd(Document)방문 종료Document 노드.
virtual VisitDocumentStart(Document)방문 시작Document 노드.
virtual VisitImageEnd(Image)방문 종료Image 노드.
virtual VisitImageStart(Image)방문 시작Image 노드.
virtual VisitOutlineElementEnd(OutlineElement)방문 종료OutlineElement 노드.
virtual VisitOutlineElementStart(OutlineElement)방문 시작OutlineElement 노드.
virtual VisitOutlineEnd(Outline)방문 종료Outline 노드.
virtual VisitOutlineGroupEnd(OutlineGroup)방문 종료OutlineGroup 노드.
virtual VisitOutlineGroupStart(OutlineGroup)방문 시작OutlineGroup 노드.
virtual VisitOutlineStart(Outline)방문 시작Outline 노드.
virtual VisitPageEnd(Page)방문 종료Page 노드.
virtual VisitPageStart(Page)방문 시작Page 노드.
virtual VisitRichTextEnd(RichText)방문 종료RichText 노드.
virtual VisitRichTextStart(RichText)방문 시작RichText 노드.
virtual VisitTableCellEnd(TableCell)방문 종료TableCell 노드.
virtual VisitTableCellStart(TableCell)방문 시작TableCell 노드.
virtual VisitTableEnd(Table)방문 종료Table 노드.
virtual VisitTableRowEnd(TableRow)방문 종료TableRow 노드.
virtual VisitTableRowStart(TableRow)방문 시작TableRow 노드.
virtual VisitTableStart(Table)방문 시작Table 노드.
virtual VisitTitleEnd(Title)방문 종료Title 노드.
virtual VisitTitleStart(Title)방문 시작Title 노드.

방문자를 사용하여 문서의 콘텐츠에 액세스하는 방법을 보여줍니다.

public static void Run()
{
    // 문서 디렉토리의 경로.
    string dataDir = RunExamples.GetDataDir_LoadingAndSaving();

    // 변환하려는 문서를 엽니다.
    Document doc = new Document(dataDir + "Aspose.one");

    // DocumentVisitor 클래스에서 상속되는 객체를 생성합니다.
    MyOneNoteToTxtWriter myConverter = new MyOneNoteToTxtWriter();

    // 이것은 잘 알려진 방문자 패턴입니다. 방문자를 받아들이도록 모델을 가져오십시오.
    // 모델은 해당 메소드를 호출하여 자체적으로 반복합니다.
    // 방문자 개체에 대해(이를 방문이라고 함).
    //
    // 객체 모델의 모든 노드에는 Accept 메서드가 있으므로 방문하는
    // 전체 문서뿐만 아니라 문서의 모든 노드에 대해 실행할 수 있습니다.
    doc.Accept(myConverter);

    // 방문이 완료되면 작업 결과를 검색할 수 있습니다.
    // 이 예에서는 방문자에 누적되었습니다.
    Console.WriteLine(myConverter.GetText());
    Console.WriteLine(myConverter.NodeCount);            
}

/// <summary>
/// 일반 텍스트 형식으로 문서를 저장하는 간단한 구현입니다. 방문자로 구현됩니다.
/// </summary>
public class MyOneNoteToTxtWriter : DocumentVisitor
{
    public MyOneNoteToTxtWriter()
    {
        nodecount = 0;
        mIsSkipText = false;
        mBuilder = new StringBuilder();
    }

    /// <summary>
    /// 방문자가 축적한 문서의 일반 텍스트를 가져옵니다.
    /// </summary>
    public string GetText()
    {
        return mBuilder.ToString();
    }

    /// <summary>
    /// 현재 출력에 텍스트를 추가합니다. 활성화/비활성화 출력 플래그를 존중합니다.
    /// </summary>
    private void AppendText(string text)
    {
        if (!mIsSkipText)
        {
            mBuilder.AppendLine(text);
        }
    }

    /// <summary>
    /// RichText 노드가 문서에서 발견될 때 호출됩니다.
    /// </summary>
    public override void VisitRichTextStart(RichText run)
    {
        ++nodecount;
        AppendText(run.Text);
    }

    /// <summary>
    /// Document 노드가 문서에서 발견될 때 호출됩니다.
    /// </summary>
    public override void VisitDocumentStart(Document document)
    {
        ++nodecount;
    }

    /// <summary>
    /// 문서에서 페이지 노드를 만나면 호출됩니다.
    /// </summary>
    public override void VisitPageStart(Page page)
    {
        ++nodecount;
        this.AppendText($"*** Page '{page.Title?.TitleText?.Text ?? "(no title)"}' ***");
    }

    /// <summary>
    /// 페이지 노드의 처리가 완료되면 호출됩니다.
    /// </summary>
    public override void VisitPageEnd(Page page)
    {
        this.AppendText(string.Empty);
    }

    /// <summary>
    /// 문서에서 Title 노드를 만나면 호출됩니다.
    /// </summary>
    public override void VisitTitleStart(Title title)
    {
        ++nodecount;
    }

    /// <summary>
    /// 문서에서 이미지 노드를 만났을 때 호출됩니다.
    /// </summary>
    public override void VisitImageStart(Image image)
    {
        ++nodecount;
    }

    /// <summary>
    /// 문서에서 OutlineGroup 노드를 만나면 호출됩니다.
    /// </summary>
    public override void VisitOutlineGroupStart(OutlineGroup outlineGroup)
    {
        ++nodecount;
    }

    /// <summary>
    /// 문서에서 아웃라인 노드를 만나면 호출됩니다.
    /// </summary>
    public override void VisitOutlineStart(Outline outline)
    {
        ++nodecount;
    }

    /// <summary>
    /// 문서에서 OutlineElement 노드를 만나면 호출됩니다.
    /// </summary>
    public override void VisitOutlineElementStart(OutlineElement outlineElement)
    {
        ++nodecount;
    }

    /// <summary>
    /// 방문자의 총 노드 수를 가져옵니다.
    /// </summary>
    public Int32 NodeCount
    {
        get { return this.nodecount; }
    }

    private readonly StringBuilder mBuilder;
    private bool mIsSkipText;
    private Int32 nodecount;
}

또한보십시오