Элементы не найдены при разборе? - PullRequest
0 голосов
/ 12 апреля 2011

Я новичок в программировании для 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, но не смог их использовать, так как мой анализатор, похоже, не находит никаких элементов ...

1 Ответ

0 голосов
/ 12 апреля 2011

HTML не является допустимым XML, но я думаю, что это легко исправить, добавьте начальный тег xml, например:

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