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ığında | Parametre türü |
|---|---|---|
VisitDocumentStart(document) | Giriliyor Document düğüm | Document |
VisitDocumentEnd(document) | Çıkılıyor Document düğüm | Document |
VisitPageStart(page) | Giriliyor Page düğüm | Page |
VisitPageEnd(page) | Çıkılıyor Page düğüm | Page |
VisitTitleStart(title) | Giriliyor Title düğüm | Title |
VisitTitleEnd(title) | Bırakma Title node | Title |
VisitOutlineStart(outline) | Birine giriliyor Outline node | Outline |
VisitOutlineEnd(outline) | Bırakma Outline node | Outline |
VisitOutlineElementStart(outline_element) | Giriliyor OutlineElement node | OutlineElement |
VisitOutlineElementEnd(outline_element) | Çıkılıyor OutlineElement node | OutlineElement |
VisitRichTextStart(rich_text) | Birine giriliyor RichText node | RichText |
VisitRichTextEnd(rich_text) | Bırakma RichText node | RichText |
VisitImageStart(image) | Giriş yapılıyor Image düğüm | Image |
VisitImageEnd(image) | Bırakıyor bir Image düğüm | Image |
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:
VisitDocumentStartbelgeye girildiğinde çağrılır.- Her çocuk
Pageözyinelemeli olarak ziyaret edilir (PageStart → children → PageEnd). - Bir içinde
Page:TitleStart/End, ardından herOutline(OutlineStart → OutlineElements → OutlineEnd). - Bir … içinde
OutlineElement:OutlineElementStart, ardından çocuklar (RichText,Image, iç içe öğeler), ardındanOutlineElementEnd. VisitDocumentEndtü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.