Parse HTML iPhone

后端 未结 3 543
孤独总比滥情好
孤独总比滥情好 2020-12-10 09:39

I have a .html file on a server, which I need to parse info from. It´s nothing huge it´s just




some text

<
3条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-10 10:34

    You can parse it with libxml, here is a sample I wrote it for you:

    #import 
    #import 
    #import 
    #import 
    
    @interface NSString(HTMLParser)
    - (NSArray *)resultWithXPath:(NSString *)xpath;
    @end
    
    @implementation NSString(HTMLParser)
    
    - (NSArray *)resultWithXPath:(NSString *)xpath
    {
      htmlDocPtr doc = htmlParseDoc((xmlChar *)[[self dataUsingEncoding:NSUTF8StringEncoding] bytes], "UTF-8");
      xmlXPathContextPtr context = xmlXPathNewContext(doc);
      xmlXPathObjectPtr xpathobj = xmlXPathEvalExpression(BAD_CAST [xpath UTF8String], context);
      xmlNodeSetPtr nodeset = xpathobj->nodesetval;
      if (xmlXPathNodeSetIsEmpty(nodeset))
        return nil;
    
      NSMutableArray *result = [[NSMutableArray alloc] initWithCapacity:nodeset->nodeNr];
    
      for (int i=0; inodeNr; i++){
        xmlNodePtr node = nodeset->nodeTab[i];
        [result addObject:[NSString stringWithCString:(char *)xmlNodeGetContent(node) encoding:NSUTF8StringEncoding]];
      }
    
      xmlXPathFreeObject(xpathobj);
      xmlXPathFreeContext(context);
      xmlFreeDoc(doc);
    
      return [result autorelease];
    }
    
    @end
    
    int main (int argc, const char * argv[])
    {
      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
      NSString *html = @"\
      \
      

    some text

    \

    some other text

    \ \ "; NSArray *result = [html resultWithXPath:@"//p"]; NSLog(@"result: %@", result); [pool release]; return 0; }

提交回复
热议问题