问题描述
|
我在服务器上有一个.html文件,我需要从中解析信息。没什么大不了的
<html>
<body>
<p> some text </p>
<p> some other text </p>
</body>
</html>
有没有一种方法可以将文本作为单独的对象放在数组中的所有“ 1”标签中,因此可以在UITableView中显示它们?
解决方法
您可以使用libxml解析它,这是我为您编写的示例:
#import <Foundation/Foundation.h>
#import <libxml/HTMLTree.h>
#import <libxml/HTMLparser.h>
#import <libxml/xpath.h>
@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; i<nodeset->nodeNr; 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 = @\"<html>\\
<body>\\
<p> some text </p>\\
<p> some other text </p>\\
</body>\\
</html>\";
NSArray *result = [html resultWithXPath:@\"//p\"];
NSLog(@\"result: %@\",result);
[pool release];
return 0;
}
, 我是否建议您只在Web服务器上保留静态JSON文件,而不是鼓励您找出如何最好地解析HTML的方法?有许多可用于iOS的JSON解析器库,这些库可让您获取所需的数据。
这样做的副作用是,您将在下载中使用较少的带宽,解析速度更快,并且结果代码对数据有效负载的更改不那么脆弱。
, 在tableViewCell中使用UIwebView。或者,我建议使用three20 Framework的TTStyleLabel。它将显示正确解析的html。