AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Anzeigen eines Ebooks im epub-Format
Tutorial durchsuchen
Ansicht
Themen-Optionen

Anzeigen eines Ebooks im epub-Format

Ein Tutorial von Ralf Stehle · begonnen am 4. Feb 2014 · letzter Beitrag vom 2. Aug 2015
Antwort Antwort
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: Anzeigen eines Ebooks im epub-Format

  Alt 1. Aug 2015, 13:06
Okay, das ist eine ehrliche Antwort, die keines weiteren Kommentars bedarf ... ist ja auch schon bald 20 Monate her, daß du dich damit befaßt hast

Doch offenbar kennst du dich ein wenig mit XML-Bearbeitung aus. Falls ich mich hierin geirrt habe, sind natürlich auch andere User dazu aufgerufen, zur Lösung beizutragen ... Ich erhalte nämlich an der Stelle, wo ich die container.xml durchsuchen will, eine Zugriffsverletzung:

TextDataBase.exe ist eine Exception der Klasse EInvalidPointer mit der Meldung 'Ungültige Zeigeroperation' aufgetreten.

... und zwar an dieser Stelle:
cr.opfFile := XmlDoc.DocumentElement.ChildNodes['rootfiles'].ChildNodes['rootfile'].AttributeNodes['full-path'].Text; Bei mir sieht das natürlich ein wenig anders aus, ist aber im Grunde dasselbe:
Delphi-Quellcode:
Function TEpubs.GetMetaData : Boolean;
begin
  Inhalt.MemS.Seek(0,soFromBeginning);
  If Inhalt.MemS.Size = 0 Then
  Begin
    Result := False;
    GLD.Fehlertext := 'Stream für Container.xml ist leer - in "' + Inhalt.EpubDatei + '"';
  End ELse
  Try
    XmlDok.LoadFromStream(Inhalt.MemS);
    Inhalt.OpfFile := XmlDok.DocumentElement.ChildNodes['rootfiles'].ChildNodes['rootfile'].AttributeNodes['full-path'].Text;
    Inhalt.OpfDir := ExtractOpfDir(Inhalt.OpfFile);
    Result := True;
  Except
    On e:exception Do
    Begin
      Result := False;
      GLD.Fehlertext := 'Fehler beim Analysieren der Container.xml in "' + Inhalt.EpubDatei + '": ' + e.Message;
    End;
  End;
end;
Die Methode ist Teil einer Klasse, die bereits im Constructor alle benötigten Komponenten erzeugt (und selbstverständlich im Destructor wieder freigibt):
Delphi-Quellcode:
Constructor TEpubs.Create;
begin
  inherited;
  UnZip := TAbUnZipper.Create(Nil);
  XmlDok := TXMLDocument.Create(nil);
  XmlDok.DOMVendor := DOMVendors.Vendors[0];
  Inhalt.MemS := TMemoryStream.Create;
  LogList := TStringList.Create;
  If System.SysUtils.FileExists(GLD.URec.LogDatei) Then
     LogList.LoadFromFile(GLD.URec.LogDatei);
end;
Wieso löst der Zugriff auf die Childnodes von container.xml eine ungültige Zeigeroperation aus? Bin leider kein XML-Experte, was ich wohl ändern sollte ...
Die container.xml sieht ja bei allen Epubs ziemlich gleich aus, manchmal feht der Encoding-Hinweis, aber sonst:
Code:
  <?xml version="1.0" encoding="UTF-8" ?>
  - <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
    - <rootfiles>
        <rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml" />
      </rootfiles>
    </container>
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: Anzeigen eines Ebooks im epub-Format

  Alt 2. Aug 2015, 10:22
Das Problem mit dem ungültigen Zeiger beim Zugriff auf einen Knoten der XML-Struktur liegt offenbar darin, daß ich TXmlDocument keinen Owner zuweise, sondern nil verwende. Die – vorläufige – Lösung besteht darin, die ganze Klasse mit Owner zu erzeugen und diesen Owner dann beim Erzeugen der TXmlDocument-Instanz einzusetzen. Ob das so sein muß oder auch anders geht, weiß ich nicht und erhoffe mir eine Antwort in diesem Thread, den ich zu dieser speziellen XML-Thematik erstellt habe.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz