iOS: libxml2 xpath 函数调用示例, 网页解析
2014-01-02 17:49
786 查看
在XPath中使用Contains函数
#import <Foundation/Foundation.h>
#import <libxml/HTMLparser.h>
#import <libxml/HTMLtree.h>
#import <libxml/xpath.h>
#import <libxml/xpathInternals.h>
//读取URL地址的内容
NSString * ReadURLContent(NSString *sURL, NSStringEncoding enc)
{
NSURL *url = [NSURL URLWithString:sURL];
NSString *sResponse = [NSString stringWithContentsOfURL:url encoding:enc error:nil];
return sResponse;
}
//测试解析Baidu的网页
void TestParseBaidu()
{
xmlDocPtr doc = NULL;
xmlNodePtr node = NULL;
//读取网页内容
NSString *sURL = @"http://www.baidu.com";
NSStringEncoding enc = NSUTF8StringEncoding;
NSString *sContent = ReadURLContent(sURL, enc);
//解析网页
doc = htmlReadDoc((xmlChar *)[sContent cStringUsingEncoding:enc], NULL, NULL, HTML_PARSE_NOWARNING | HTML_PARSE_NOERROR);
if (doc == NULL) {
printf("无法解析网页%s\n", [sURL cStringUsingEncoding: NSUTF8StringEncoding]);
return;
}
//得到根节点
node = xmlDocGetRootElement(doc);
printf("根节点名称: %s\n", node->name);
//使用xPath函数查找Script节点
xmlXPathContextPtr context = NULL;
xmlXPathObjectPtr result = NULL;
const xmlChar *sScriptTag = (const xmlChar *)"src";
const xmlChar *sXpath = (const xmlChar *)"//script [contains(@src,'.js')]";
context = xmlXPathNewContext(doc);
result = xmlXPathEvalExpression(sXpath, context);
if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
printf("没有选择结果\n");
}
//输出链接js脚本
for(int i=0; i<result->nodesetval->nodeNr; i++){
node = result->nodesetval->nodeTab[i];
xmlChar *sScriptFile = xmlGetProp(node, sScriptTag);
printf("%s: %s\n", node->name, sScriptFile);
xmlFree(sScriptFile);
}
//释放内存
xmlXPathFreeObject(result);
xmlXPathFreeContext(context);
xmlFreeDoc(doc);
xmlCleanupParser();
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
TestParseBaidu();
}
return 0;
}
#import <Foundation/Foundation.h>
#import <libxml/HTMLparser.h>
#import <libxml/HTMLtree.h>
#import <libxml/xpath.h>
#import <libxml/xpathInternals.h>
//读取URL地址的内容
NSString * ReadURLContent(NSString *sURL, NSStringEncoding enc)
{
NSURL *url = [NSURL URLWithString:sURL];
NSString *sResponse = [NSString stringWithContentsOfURL:url encoding:enc error:nil];
return sResponse;
}
//测试解析Baidu的网页
void TestParseBaidu()
{
xmlDocPtr doc = NULL;
xmlNodePtr node = NULL;
//读取网页内容
NSString *sURL = @"http://www.baidu.com";
NSStringEncoding enc = NSUTF8StringEncoding;
NSString *sContent = ReadURLContent(sURL, enc);
//解析网页
doc = htmlReadDoc((xmlChar *)[sContent cStringUsingEncoding:enc], NULL, NULL, HTML_PARSE_NOWARNING | HTML_PARSE_NOERROR);
if (doc == NULL) {
printf("无法解析网页%s\n", [sURL cStringUsingEncoding: NSUTF8StringEncoding]);
return;
}
//得到根节点
node = xmlDocGetRootElement(doc);
printf("根节点名称: %s\n", node->name);
//使用xPath函数查找Script节点
xmlXPathContextPtr context = NULL;
xmlXPathObjectPtr result = NULL;
const xmlChar *sScriptTag = (const xmlChar *)"src";
const xmlChar *sXpath = (const xmlChar *)"//script [contains(@src,'.js')]";
context = xmlXPathNewContext(doc);
result = xmlXPathEvalExpression(sXpath, context);
if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
printf("没有选择结果\n");
}
//输出链接js脚本
for(int i=0; i<result->nodesetval->nodeNr; i++){
node = result->nodesetval->nodeTab[i];
xmlChar *sScriptFile = xmlGetProp(node, sScriptTag);
printf("%s: %s\n", node->name, sScriptFile);
xmlFree(sScriptFile);
}
//释放内存
xmlXPathFreeObject(result);
xmlXPathFreeContext(context);
xmlFreeDoc(doc);
xmlCleanupParser();
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
TestParseBaidu();
}
return 0;
}
相关文章推荐
- 网页中先全部解析JavaScript,(若有事件/入口函数)再调用
- Scrapy 入门学习笔记(2) -- xpath 与 css 解析以及解析网页示例
- perl post函数获取网页内容及解析数据的例子
- 基于python的-网页解析方式(xpath)
- Qt按ESC关闭模态对话框不触发closeEvent()问题解析(ESC默认调用的是reject()函数,所以必须覆盖这个函数才会有效果)good
- iOS中解析json格式数据的各种方法调用
- 如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例
- 利用java反射调用实现对字符串的解析,成功调入函数,并且返回值
- iOS中解析json格式数据的各种方法调用
- IOS_ViewController生命周期内各个函数的调用次序
- ios非UTF-8格式的网页解析
- 函数调用约定解析
- iframe调用父页面函数示例详解
- iOS 开发RunTime之函数调用
- iOS中XML解析 (二) libxml2(实例:打印xml内容及存储到数组)
- iOS 调用百度地图(网页和客户端两种)
- Cocos2dx通过JniHelper调用java函数,报错error link2019: 无法解析的外部命令
- 今日收获总结(关于存储过程时间查询的一些方法以及字段截取的函数及调用示例)
- iOS-网页调用百度地图API
- ios非UTF-8格式的网页解析