DocumentVisitor — Aspose.Note FOSS for Python API Reference
Lớp: DocumentVisitor
Package: aspose.note Import: from aspose.note import DocumentVisitor
DocumentVisitor là lớp cơ sở trừu tượng cho việc duyệt theo mẫu visitor của cây tài liệu OneNote. Tạo lớp con và ghi đè chỉ các phương thức visit bạn cần. Gọi node.Accept(visitor) để bắt đầu duyệt từ bất kỳ nút nào; gọi doc.Accept(visitor) để duyệt toàn bộ tài liệu.
Tất cả các phương thức trong lớp cơ sở đều không thực hiện gì (trả về None). Ghi đè chỉ những phương thức liên quan đến trường hợp sử dụng của bạn.
Phương thức Visit
| Method | Được gọi khi | Kiểu tham số |
|---|---|---|
VisitDocumentStart(document) | Đang vào một Document nút | Document |
VisitDocumentEnd(document) | Rời một Document nút | Document |
VisitPageStart(page) | Đang vào một Page nút | Page |
VisitPageEnd(page) | Rời một Page nút | Page |
VisitTitleStart(title) | Đang vào một Title nút | Title |
VisitTitleEnd(title) | Rời một Title nút | Title |
VisitOutlineStart(outline) | Đang vào một Outline nút | Outline |
VisitOutlineEnd(outline) | Rời một Outline nút | Outline |
VisitOutlineElementStart(outline_element) | Đang vào một OutlineElement node | OutlineElement |
VisitOutlineElementEnd(outline_element) | Rời một OutlineElement node | OutlineElement |
VisitRichTextStart(rich_text) | Vào một RichText node | RichText |
VisitRichTextEnd(rich_text) | Rời khỏi một RichText node | RichText |
VisitImageStart(image) | Đang vào một Image node | Image |
VisitImageEnd(image) | Rời khỏi một Image nút | Image |
Tất cả các phương thức có chữ ký:
def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...Thứ tự duyệt
Accept phân phối trong một duyệt sâu đầu tiên, theo thứ tự trước:
VisitDocumentStartđược gọi khi vào tài liệu.- Mỗi nút con
Pageđược thăm một cách đệ quy (PageStart → children → PageEnd). - Trong một
Page:TitleStart/End, sau đó mỗiOutline(OutlineStart → OutlineElements → OutlineEnd). - Trong một
OutlineElement:OutlineElementStart, sau đó các phần tử con (RichText,Image, các phần tử lồng nhau), sau đóOutlineElementEnd. VisitDocumentEndđược gọi sau khi tất cả các trang đã được truy cập.
Ví dụ sử dụng
Thu thập tất cả tiêu đề trang
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)Đếm các nút theo loại
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}")Trích xuất tất cả hình ảnh qua visitor
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)")Xây dựng báo cáo đề cương tài liệu
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))Thăm từ một nút con
Accept có thể được gọi trên bất kỳ nút nào, không chỉ tài liệu gốc:
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())Các loại nút được hỗ trợ
Trình duyệt hiện đang phân phối cho các loại nút sau: Document, Page, Title, Outline, OutlineElement, RichText, Image. Không có phương thức visit cho Table, TableRow, TableCell, AttachedFile, hoặc NumberList — những nút đó được tiếp cận qua GetChildNodes duyệt thay thế.