DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Luokka: DocumentVisitor

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

DocumentVisitor on abstrakti perusluokka OneNote-dokumenttipuun vierailijamallin läpikäyntiin. Periytä siitä ja ylikirjoita vain ne visit-metodit, joita tarvitset. Kutsu node.Accept(visitor) aloittaaksesi läpikäynnin mistä tahansa solmusta; kutsu doc.Accept(visitor) läpikäydäksesi koko asiakirja.

Kaikki perusluokan metodit ovat tyhjiä (palauttavat None). Ylikirjoita vain ne, jotka ovat merkityksellisiä käyttötapauksessasi.


Visit‑metodit

MethodKutsutaan kunParametrin tyyppi
VisitDocumentStart(document)Saapuminen Document solmuDocument
VisitDocumentEnd(document)Poistuminen Document solmuDocument
VisitPageStart(page)Saapuminen Page solmuPage
VisitPageEnd(page)Poistutaan Page solmuPage
VisitTitleStart(title)Siirrytään Title solmuTitle
VisitTitleEnd(title)Jättäen Title nodeTitle
VisitOutlineStart(outline)Syötetään Outline nodeOutline
VisitOutlineEnd(outline)Jättäen Outline nodeOutline
VisitOutlineElementStart(outline_element)Siirtyminen OutlineElement nodeOutlineElement
VisitOutlineElementEnd(outline_element)Poistuminen OutlineElement nodeOutlineElement
VisitRichTextStart(rich_text)Syötetään RichText nodeRichText
VisitRichTextEnd(rich_text)Jättäen RichText nodeRichText
VisitImageStart(image)Syötetään Image solmuImage
VisitImageEnd(image)Jättäen Image solmuImage

Kaikilla metodeilla on seuraava allekirjoitus:

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

Läpikäynnin järjestys

Accept lähettää syvyyssuuntaisen, esijärjestyslähtöisen läpikäynnin aikana:

  1. VisitDocumentStart kutsutaan, kun dokumenttiin siirrytään.
  2. Jokainen lapsi Page käydään läpi rekursiivisesti (PageStart → children → PageEnd).
  3. Sisällä Page: TitleStart/End, sitten jokainen Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Jossakin OutlineElement: OutlineElementStart, sitten lapset (RichText, Image, sisäkkäiset elementit), sitten OutlineElementEnd.
  5. VisitDocumentEnd kutsutaan sen jälkeen, kun kaikki sivut on käyty läpi.

Käyttöesimerkit

Kerää kaikki sivujen otsikot

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)

Laske solmut tyypin mukaan

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}")

Hae kaikki kuvat visitorin avulla

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)")

Rakenna asiakirjan sisällysluetteloraportti

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))

Käy läpi alisolmusta

Accept voidaan kutsua mistä tahansa solmusta, ei vain juuriasiakirjasta:

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())

Tuetut solmutyypit

Visitor tällä hetkellä käsittelee seuraavia solmutyyppejä: Document, Page, Title, Outline, OutlineElement, RichText, Image. Ei ole visit-metodeja kohteelle Table, TableRow, TableCell, AttachedFile, tai NumberList — nämä solmut saavutetaan kautta GetChildNodes traversoinnin avulla sen sijaan.


Katso myös

  • Document: juurisolmu; kutsu doc.Accept(visitor) aloittaaksesi täyden traversoinnin
  • Page: VisitPageStart / VisitPageEnd
  • Outline: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Kuva: VisitImageStart / VisitImageEnd
 Suomi