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>