我一直在使用 xpath规范 XPath 介绍
通过将 HTML 从 URL 传递到NSXMLDocument,然后使用NSXMLNode 的 nodesForXPath:error 获取我想要的值:
在这种情况下,我使用大型机的 URL。但是任何有效的 URL 都应该没问题。
两个 NSXML 类似乎都可以像解析 xml 一样解析 html
您可以搜索大量 xpath 查询字符串语法示例,我发现一旦您知道 HTML 标记和类语法是什么,就很容易深入了解 DOM 树。
我在这里对整个页面使用了一个非常简单的 href查询。
但是我已经包含了一个注释掉的例子来显示更多。
-(void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[theWebView setFrameLoadDelegate:self];
NSURL* fileURL = [NSURL URLWithString:@"http://example.com"];
NSURLRequest* request = [NSURLRequest requestWithURL:fileURL];
[[theWebView mainFrame] loadRequest:request];
}
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {
NSError *err_p = nil;
NSXMLDocument * xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:[NSURL URLWithString:[theWebView mainFrameURL]]
options:(NSXMLNodePreserveWhitespace|
NSXMLNodePreserveCDATA)
error:&err_p];
if (xmlDoc == nil) {
xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:[NSURL URLWithString:[theWebView mainFrameURL]]
options:NSXMLDocumentTidyXML
error:&err_p];
}
NSError * error2;
NSString *xpathQueryTRTest =@"//a";//--query string for all <a href tags
//-- for example 2 --NSString *xpathQueryTRTest =@"//div/p[1]";//--query string for all <a href tags
NSArray *newItemsNodesTRTEST = [xmlDoc nodesForXPath:xpathQueryTRTest error:&error2];//--xpath node results returned in an array
[xmlDoc release];
if (error2)
{
[[NSAlert alertWithError:error2] runModal];
return ;
}
for (NSXMLElement *node in newItemsNodesTRTEST)//--parse the nodes in the array
{
NSLog(@"\nThe Node = %@\nThe node href value = %@", node, [[node attributeForName:@"href"]stringValue]);
//--for example 2 -- NSLog(@"\nThe Node value = %@\n", [node stringValue]);
}
}