【问题标题】:Fetch table of contents from html page in iPhone从 iPhone 中的 html 页面获取目录
【发布时间】:2012-07-20 05:30:53
【问题描述】:

我是 iPhone 开发者的新手,

我为我的应用程序制作了 epub 阅读器,我想在其中从本地 .html 页面获取 <text> 标记的所有值,并将其存储在我的数组中。

例如: 这是我的toc.html 文件,我想从这个文件中获取<text> 标签的所有值,

<navMap>
    <navPoint class="chapter" id="navpoint-1" playOrder="1">
        <navLabel>
           <text>Cover</text>
        </navLabel>
      <content src="Morning Insight 26 April - K S 2/Morning Insight 26 April - K S 2/Morning Insight 26 April - K S/Morning Insight 26 April - K S/Morning Insight/OEBPS/first.html"/>
   </navPoint>

     <navPoint class="chapter" id="navpoint-2" playOrder="2">
        <navLabel>
          <text>News</text>
        </navLabel>
      <content src="Morning Insight 26 April - K S 2/Morning Insight 26 April - K S 2/Morning Insight 26 April - K S/Morning Insight 26 April - K S/Morning Insight/OEBPS/1.html"/>
   </navPoint>

    <navPoint class="chapter" id="navpoint-3" playOrder="3">
       <navLabel>
          <text>Report</text>
       </navLabel>
      <content src="Morning Insight 26 April - K S 2/Morning Insight 26 April - K S 2/Morning Insight 26 April - K S/Morning Insight 26 April - K S/Morning Insight/OEBPS/2.html"/>
    </navPoint>

    <navPoint class="chapter" id="navpoint-4" playOrder="4">
       <navLabel>
          <text>Economy Update</text>
       </navLabel>
      <content src="Morning Insight 26 April - K S 2/Morning Insight 26 April - K S 2/Morning Insight 26 April - K S/Morning Insight 26 April - K S/Morning Insight/OEBPS/3.html"/>
    </navPoint>

<navMap>

最后我的数组应该有:

array at 0: Cover
array at 1: News
array at 2: Report
array at 3: Economy Update

编辑:

- (NSString *)dataFilePath:(BOOL)forSave {
    NSLog(@"Path of my file=%@",TOC);
    return TOC;
}

-(void)viewDidAppear:(BOOL)animated{

    [super viewDidLoad];
    TOCArray=[[NSMutableArray alloc]init];

    NSString *filePath = [self dataFilePath:FALSE];
    NSData *response = [[NSMutableData alloc] initWithContentsOfFile:filePath];
    GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:response options:0 error:nil];

    NSArray *navPoints = [[[doc.rootElement elementsForName:@"navMap"] lastObject] elementsForName:@"navPoint"];

    for (GDataXMLElement *m in navPoints)
    {
        NSArray *navLabel = [m elementsForName:@"navLabel"];
        for (GDataXMLElement *e in navLabel)
        {
            NSArray *text = [e elementsForName:@"text"];
            [TOCArray addObject:[text objectAtIndex:0]];
        }
    }

    for (int i=0; i<[TOCArray count]; i++) {
        NSLog(@"Toc array=%@",[TOCArray objectAtIndex:i]);
    }

}

我的日志显示:Path of my file=/Users/krunal/Library/Application Support/iPhone Simulator/5.0/Applications/D414BC19-C005-4D93-896D-A6FB71DE4D21/Documents/UnzippedEpub/toc.ncx

但我的数组仍然为空。

这是我的toc.ncx 文件http://www.mediafire.com/?4r883s80he23cua

新编辑

2012-07-23 16:07:50.522  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a96480: {type:1 name:text xml:"<text>Cover</text>"}
2012-07-23 16:07:50.522  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a96610: {type:1 name:text xml:"<text>News</text>"}
2012-07-23 16:07:50.523  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a96730: {type:1 name:text xml:"<text>Report</text>"}
2012-07-23 16:07:50.523  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a96850: {type:1 name:text xml:"<text>Economy Update</text>"}
2012-07-23 16:07:50.524  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a96970: {type:1 name:text xml:"<text>Other Factors</text>"}
2012-07-23 16:07:50.524  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a96aa0: {type:1 name:text xml:"<text>Result Update</text>"}
2012-07-23 16:07:50.525  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a96bc0: {type:1 name:text xml:"<text>Result Update (Continued)</text>"}
2012-07-23 16:07:50.526  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a96ce0: {type:1 name:text xml:"<text>Trends in NIM</text>"}
2012-07-23 16:07:50.526  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a96e00: {type:1 name:text xml:"<text>Key Stats</text>"}
2012-07-23 16:07:50.527  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a96f40: {type:1 name:text xml:"<text>Result Update</text>"}
2012-07-23 16:07:50.527  iBook [2105:fe03] Toc array=GDataXMLElement 0x6a97060: {type:1 name:text xml:"<text>Disclaimer</text>"}

【问题讨论】:

标签: iphone html ipad nsarray epub


【解决方案1】:

我使用 GDataTouchXML.. 为应用程序进行了一些 xml 解析。

创建一个数组来保存值。

假设您的服务调用返回存储在响应中的NSData。从中创建一个GDataXMLDocument 对象。

- (NSArray*)textArrayFromNCX
{
    NSMutableArray *values = [NSMutableArray array];

    // get the toc.ncx from documents folder
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    docPath = [docPath stringByAppendingPathComponent:@"UnzippedEpub"];
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"toc" ofType:@"ncx" inDirectory:docPath];

    // init the xml document
    NSData *response = [[NSMutableData alloc] initWithContentsOfFile:filePath];
    GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:response options:0 error:nil];

    // loop through the elements
    NSArray *navPoints = [[[doc.rootElement elementsForName:@"navMap"] lastObject] elementsForName:@"navPoint"];
    for (GDataXMLElement *m in navPoints)
    {
        NSArray *navLabel = [m elementsForName:@"navLabel"];
        for (GDataXMLElement *e in navLabel)
        {
            NSArray *text = [e elementsForName:@"text"];
            [values addObject:[[text lastObject] stringValue]];
        }
    }

    return values;
}

GData 库返回数组,即使实际 xml 中只有一个标签/元素。内循环每次外循环迭代只运行一次。

要了解如何集成图书馆访问

http://www.raywenderlich.com/725/how-to-read-and-write-xml-documents-with-gdataxml

【讨论】:

  • 您是否尝试过调试以确定外部循环是否正在运行??
  • 改用这条线试试NSArray *navPoints = [[[doc.rootElement elementsForName:@"navMap"] lastObject] elementsForName:@"navPoint"];
  • 请回答,我想你和我的答案非常接近。
  • 这样做[TOCArray addObject:[[text objectAtIndex:0]] stringValue];
  • 您知道如何在文档目录中找到名为toc.ncx 的文件的路径吗?在我的文档目录中有很多文件夹,toc.ncx 文件将在其中一个文件夹内。
猜你喜欢
  • 2012-07-20
  • 2015-01-09
  • 2010-09-08
  • 1970-01-01
  • 2017-12-03
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多