2011-04-12 95 views
0

我是新来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'解析器函数,但一直无法使用它们,因为我的解析器似乎没有找到任何元素...

+0

当您登录xmlCheck对您有麻烦的URL,它显示了有效的XML?如果你把'NSLog(@“parserError =%@”,[parser parserError]);''[parser parse];'后面的行,它是什么意思? – Anna 2011-04-12 15:36:09

+0

我收到以下错误:parserError =错误域= NSXMLParserErrorDomain代码= 68“该操作无法完成。(NSXMLParserErrorDomain错误68.)”我假设这意味着我的URL不包含有效的XML?你怎么知道一个网站是XML,HTML还是其他的?当希望解析不是XML的URL时,编码人员通常会做什么? – JRoss 2011-04-13 05:51:17

+0

对于解析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

回答

0

html无效XML ,但我认为这是一个简单的办法,添加类似于XML开始标记:

<?xml version="1.0" encoding="utf-8"?> 
<tr style=" "> 
snipped for space... 
</tr>` 
+0

因为我不控制这个URL,下面是最好的办法:1.将我的(NSMutableData *)xmlData转换成一个字符串(起始标签在开始处)2.将新字符串转换为NSURL对象3.使用“initWithContentsOfURL”实例方法解析? – JRoss 2011-04-13 05:58:38

+0

当我更新'connectionDidFinishLoading'方法来解析我的转换后的URL对象时,我收到NSXML错误:“NSXMLParserErrorDomain error 5” – JRoss 2011-04-13 12:42:35