我是新来iPhone编程,但是,我一直在研究我的问题一段时间了,一直没能找到解决方案...解析时没有找到元素?
基本上,我想解析一个URL,我不控制,这在其页面源代码以下所需的信息:
<tr style=" ">
<td valign="top" style=" ">
<p style=" ">
4/10/2011
</p>
</td>
<td valign="top" style=" ">
<p style=" ">
-18
</p>
</td>
<td valign="top" style=" ">
<p style=" ">
21%
</p>
</td>
<td valign="top" style=" ">
<p style=" ">
39%
</p>
</td>
<td valign="top" style=" ">
<p style=" ">
45%
</p>
</td>
<td valign="top" style=" ">
<p style=" ">
54%
</p>
</td>
</tr>`
正确创建与网站的连接,我把我的数据一起,并尝试分析后:
//This method will be called several times as the data arrives
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[xmlData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
/*
//We are just checking to make sure we are getting the XML
NSString *xmlCheck = [[[NSString alloc] initWithData:xmlDat encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"xmlCheck = %@", xmlCheck);
//Check was Successful!
*/
//Create the parser object with the data received from the web service
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
[parser setDelegate:self];
//Tell it to start parsing - the document will be parsed and the delegate of NSXMLParser will get all of
//its delegate messages sent to it before this line finishes execution - it is blocking
[parser parse];
//The parser is done (it blocks until done), you can release it immediately
[parser release];
}
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *) qName
attributes:(NSDictionary *) attributeDict
{
NSLog(@"StartedParsing");
//if ([elementName isEqualToString:@"tr"]) {
if (elementName) {
NSLog(@"found element!");
titleString = [[NSMutableString alloc] init];
}
}
你会发现,首先 我试图搜索元素'tr',但随后切换到在URL中查找任何元素。什么都不会打印到我的控制台窗口,这让我觉得我的解析器没有找到任何元素。
现在,如果我在以下网站上尝试使用相同的代码:http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml,则会找到许多不同的元素。这导致我相信URL可能需要以某种格式。有人能帮我吗??
在此先感谢!
P.S. - 我也实现了'foundCharacters'和'didEndElement'解析器函数,但一直无法使用它们,因为我的解析器似乎没有找到任何元素...
当您登录xmlCheck对您有麻烦的URL,它显示了有效的XML?如果你把'NSLog(@“parserError =%@”,[parser parserError]);''[parser parse];'后面的行,它是什么意思? – Anna 2011-04-12 15:36:09
我收到以下错误:parserError =错误域= NSXMLParserErrorDomain代码= 68“该操作无法完成。(NSXMLParserErrorDomain错误68.)”我假设这意味着我的URL不包含有效的XML?你怎么知道一个网站是XML,HTML还是其他的?当希望解析不是XML的URL时,编码人员通常会做什么? – JRoss 2011-04-13 05:51:17
对于解析html,您可能会更加成功地使用libxml2,它包含在[本页中提到的iOS sdk中](http://developer.apple.com/library/ios/#documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/ CoreServicesLayer/CoreServicesLayer.html)并搜索SO。例如:http://stackoverflow.com/questions/405749/parsing-html-on-the-iphone – Anna 2011-04-13 13:41:23