DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Sınıf: DocumentVisitor

Package: aspose.note Import: from aspose.note import DocumentVisitor

DocumentVisitor OneNote belge ağacının ziyaretçi deseniyle gezintisi için soyut temel sınıftır. Alt sınıfını oluşturun ve yalnızca ihtiyacınız olan visit yöntemlerini geçersiz kılın. Call node.Accept(visitor) herhangi bir düğümden gezintiye başlamak için; call doc.Accept(visitor) tüm belgeyi gezmek için.

Temel sınıftaki tüm yöntemler hiçbir işlem yapmaz (return None). Yalnızca kullanım durumunuza ilgili olanları geçersiz kılın.


Ziyaret Yöntemleri

MethodÇağrıldığındaParametre türü
VisitDocumentStart(document)Giriliyor Document düğümDocument
VisitDocumentEnd(document)Çıkılıyor Document düğümDocument
VisitPageStart(page)Giriliyor Page düğümPage
VisitPageEnd(page)Çıkılıyor Page düğümPage
VisitTitleStart(title)Giriliyor Title düğümTitle
VisitTitleEnd(title)Bırakma Title nodeTitle
VisitOutlineStart(outline)Birine giriliyor Outline nodeOutline
VisitOutlineEnd(outline)Bırakma Outline nodeOutline
VisitOutlineElementStart(outline_element)Giriliyor OutlineElement nodeOutlineElement
VisitOutlineElementEnd(outline_element)Çıkılıyor OutlineElement nodeOutlineElement
VisitRichTextStart(rich_text)Birine giriliyor RichText nodeRichText
VisitRichTextEnd(rich_text)Bırakma RichText nodeRichText
VisitImageStart(image)Giriş yapılıyor Image düğümImage
VisitImageEnd(image)Bırakıyor bir Image düğümImage

Tüm yöntemlerin imzası şudur:

def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...

Gezinti Sırası

Accept derin öncelikli, pre-order traversal’da gönderir:

  1. VisitDocumentStart belgeye girildiğinde çağrılır.
  2. Her çocuk Page özyinelemeli olarak ziyaret edilir (PageStart → children → PageEnd).
  3. Bir içinde Page: TitleStart/End, ardından her Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Bir … içinde OutlineElement: OutlineElementStart, ardından çocuklar (RichText, Image, iç içe öğeler), ardından OutlineElementEnd.
  5. VisitDocumentEnd tüm sayfalar ziyaret edildikten sonra çağrılır.

Kullanım Örnekleri

Tüm sayfa başlıklarını topla

from aspose.note import Document, DocumentVisitor, Page, Title

class TitleCollector(DocumentVisitor):
    def __init__(self):
        self.titles = []

    def VisitTitleStart(self, title: Title) -> None:
        if title.TitleText:
            self.titles.append(title.TitleText.Text)

doc = Document("MyNotes.one")
visitor = TitleCollector()
doc.Accept(visitor)
print(visitor.titles)

Düğümleri türe göre say

from aspose.note import Document, DocumentVisitor, Page, RichText, Image

class NodeCounter(DocumentVisitor):
    def __init__(self):
        self.pages = 0
        self.rich_texts = 0
        self.images = 0

    def VisitPageStart(self, page: Page) -> None:
        self.pages += 1

    def VisitRichTextStart(self, rich_text: RichText) -> None:
        self.rich_texts += 1

    def VisitImageStart(self, image: Image) -> None:
        self.images += 1

doc = Document("MyNotes.one")
counter = NodeCounter()
doc.Accept(counter)
print(f"Pages: {counter.pages}, RichText: {counter.rich_texts}, Images: {counter.images}")

Ziyaretçi aracılığıyla tüm görselleri çıkar

from aspose.note import Document, DocumentVisitor, Image

class ImageExtractor(DocumentVisitor):
    def __init__(self):
        self.images = []

    def VisitImageStart(self, image: Image) -> None:
        if image.Bytes:
            self.images.append(image)

doc = Document("MyNotes.one")
extractor = ImageExtractor()
doc.Accept(extractor)

for i, img in enumerate(extractor.images):
    filename = img.FileName or f"image_{i}.bin"
    with open(filename, "wb") as f:
        f.write(img.Bytes)
    print(f"Saved: {filename} ({len(img.Bytes)} bytes)")

Bir belge taslak raporu oluştur

from aspose.note import (
    Document, DocumentVisitor,
    Page, Outline, OutlineElement, RichText
)

class OutlineReporter(DocumentVisitor):
    def __init__(self):
        self._indent = 0
        self.lines = []

    def VisitPageStart(self, page: Page) -> None:
        title = page.Title.TitleText.Text if page.Title and page.Title.TitleText else "(untitled)"
        self.lines.append(f"PAGE: {title}")
        self._indent = 1

    def VisitOutlineElementStart(self, elem: OutlineElement) -> None:
        self._indent = 2 + elem.IndentLevel

    def VisitRichTextStart(self, rt: RichText) -> None:
        if rt.Text.strip():
            self.lines.append("  " * self._indent + rt.Text.strip())

doc = Document("MyNotes.one")
reporter = OutlineReporter()
doc.Accept(reporter)
print("\n".join(reporter.lines))

Alt düğümden ziyaret et

Accept herhangi bir düğümde, yalnızca kök belge değil, çağrılabilir:

from aspose.note import Document, Page, DocumentVisitor, RichText

class TextPrinter(DocumentVisitor):
    def VisitRichTextStart(self, rt: RichText) -> None:
        print(rt.Text)

doc = Document("MyNotes.one")
pages = doc.GetChildNodes(Page)
if pages:
    # Visit only the first page
    pages[0].Accept(TextPrinter())

Desteklenen Düğüm Türleri

Ziyaretçi şu anda bu düğüm tipleri için yönlendiriyor: Document, Page, Title, Outline, OutlineElement, RichText, Image. Şu tipler için ziyaret metotları yok Table, TableRow, TableCell, AttachedFile, ya da NumberList — bu düğümlere şu şekilde ulaşılır GetChildNodes dolaşım ile.


Ayrıca Bakınız

  • Belge: kök düğüm; çağır doc.Accept(visitor) tam dolaşımı başlatmak için
  • Sayfa: VisitPageStart / VisitPageEnd
  • Anahat: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Görüntü: VisitImageStart / VisitImageEnd
 Türkçe