我正在尝试开发一个 iPhone 应用程序来读取 ePub 文件。有没有可用的框架来开发这个?我不知道如何阅读这种文件格式。我尝试使用 NSXML Parser 解析扩展名为 .epub 的示例文件,但失败了。
6 回答
EPUB 格式汇集了一堆不同的规范/格式:
- 一个人说这本书的内容应该是什么样子(XHTML 1.1 + CSS 的一个子集)
- 一个定义一个“清单”,列出构成该内容的所有文件(OPF,它是一个 XML 文件)
- 一个定义如何打包所有内容(OEBPS:清单中所有内容的 zip 文件以及一些额外文件)
规范看起来有点令人生畏,但实际上,一旦您掌握了基础知识(解压缩、解析 XML),这并不是特别困难或复杂。
您需要弄清楚如何下载 EPUB,将其解压缩到某个位置,解析清单,然后显示相关内容。
如果您刚刚开始,请提供一些建议:
要显示内容,请暂时使用 a UIWebView
。
这是您的代码的高级逐步说明:
1)创建一个视图UIWebView
2) 下载 EPUB 文件
3)使用上面链接的zip库将其解压缩到应用程序文档文件夹中的子目录
4) 使用上面链接的 TBXML 解析 XML 文件META-INF/container.xml
(如果此文件不存在,则 EPUB 无效)
5) 在这个 XML 中,找到第一个带有 media-type 的“根文件” application/oebps-package+xml
。这是本书的 OPF 文件。
6)解析OPF文件(也是XML)
7) 现在你需要知道这本书的第一章是什么。
a) 元素中的每个<item>
元素<manifest>
都有一个 id 和一个 href。将这些存储在NSDictionary
其中键是 id 而对象是 href 的地方。
b) 看第<itemref>
一个<spine>
。它有一个 idref 属性,对应于 (a) 中的一个 id。在 中查找该 ID,NSDictionary
您将获得一个 href。
c) 这是向用户展示的第一章的文件。找出完整路径是什么(提示:它是您在 (3) 中将 zip 文件解压缩到的任何位置以及 (6) 中 OPF 文件的基本目录)
8) 创建一个NSURL
using fileURLWithPath:
,其中路径是 (7c) 的完整路径。UIWebView
使用您在 (1) 中创建的加载此请求。
您需要实现前进/后退按钮或滑动或其他东西,以便用户可以从一章移动到另一章。使用<spine>
来确定接下来要显示的文件 - <itemrefs>
XML 中的 是它们应该出现在读者面前的顺序。
显然EPUB“只是”一种XML格式,所以如果你有一个xml解析器和规范应该没问题。
加上一点tuto?玩得开心!
编辑:您也可以在这里阅读一些代码,这是用于生成 epub,而不是阅读它们,但代码可能有用。
再次编辑:并在右侧栏中查看相关问题的链接,在支持 ePub 的免费电子书阅读器的答案中有一些链接。
编辑 3:您应该在编辑问题时添加评论,以便回答您的人可以继续讨论(如果您不发表评论,我们不会注意到您的编辑)。
因此,解析失败是因为您没有阅读 Stack Overflow 上的规范或相关问题... *.epub 文件是一个包含 XML 文件的压缩文件夹,而不是纯 xml。
我通读了一遍本教程(需要免费注册,抱歉),它让我对 ePub 有了很好的介绍。developerWorks 教程在这里
我强烈建议您查看一些 XML 处理库。如果您只想从 XML 文件中获取特定信息,那么您可以选择正确的解析策略。
我正在为 iphone 应用程序创建一个 epub 框架。
目前(我真的只是开始)我可以生成一个带有章节链接的标题页。
我的方法是
- 使用 quickconnect iphone 框架作为一个层(也许我改为 phonegap),它基本上允许 javascript 应用程序作为 iphone 应用程序
- 将解压后的 epub 作为资源添加到项目中
- 使用自定义版本的 epub.js 解析整个内容(在 google-code 上的某个位置)
现在我正在研究 pageflip、某种 gui 和小的可用性问题(保存当前正在查看的页面)
我希望这能给你一个关于如何开始的想法
Jonathan Wight (schwa) 开发了一个 ObjC 解决方案,用于在 iPhone 上解析和显示 ePub 文档。这是他的 TouchCode 开源存储库的一部分。