Как отобразить Xpath на iPhone - PullRequest
2 голосов
/ 14 января 2012

Я пытаюсь извлечь информацию о погоде из здесь , используя Xpath на iPhone. На данный момент он анализирует все данные, но я застрял на том, как извлечь содержимое и отобразить его в таблице. Это то, что я до сих пор:

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[ @"http://aviationweather.gov/adds/metars/?station_ids=1234&std_trans=translated&chk_metars=on&hoursStr=most+recent+only&submitmet=Submit"stringByReplacingOccurrencesOfString:@"1234" withString:self.title]]];

TFHpple * doc       = [[TFHpple alloc] initWithHTMLData:data];
NSArray * elements  = [doc searchWithXPathQuery:@"//table[1]//tr"];
NSLog(@"%@", elements);
TFHppleElement * element = [elements objectAtIndex:0];
[element content];              // Tag's innerHTML
[element  tagName];              // "a"
[element  attributes];           // NSDictionary of href, class, id, etc.
[element  objectForKey:@"href"]; // Easy access to single attribute  

Если кому-то нужно посмотреть, что он выводит, дайте мне знать.

Спасибо, Andrew

1 Ответ

1 голос
/ 14 января 2012

У меня была та же проблема, с которой я столкнулся, и я не знал, куда идти, но в итоге я реализовал этот код.Надеюсь, что это поможет, все еще есть небольшие кусочки, чтобы заставить его работать правильно, но для природы разработанного мною приложения это все, что я могу вам дать.это не намного больше, чем просто фактическая реализация в вашем коде, которая вам действительно нужна.

#import "XPathQuery.h"


NSMutableArray *weatherArray = [[NSMutableArray arrayWithArray:0]retain]; // Initilize the NSMutableArray can also be done with just an NSArray but you will have to change the populateArray method.
NSString *xPathLookupQuery = @"//table[1]//tr"; // Path in xml
nodes = PerformXMLXPathQuery(data, xPathLookupQuery); // Pass the data in that you need to search through
[self populateArray:weatherArray fromNodes:nodes]; // To populate multiple values into array.

session = [[self fetchContent:nodes] retain]; // To populate a single value and returns value.

- (void)populateArray:(NSMutableArray *)array fromNodes:(NSArray *)nodes 
{
for (NSDictionary *node in nodes) {
    for (id key in node) {
        if ([key isEqualToString:@"nodeContent"]) {
            [array addObject:[node objectForKey:key]];
        }
    }
}
}

Вам нужен только приведенный выше или приведенный ниже код, если вы не хотите оба.

- (NSString *)fetchContent:(NSArray *)nodes 
{
NSString *result = @"";
for (NSDictionary *node in nodes) {
    for (id key in node) {
        if([key isEqualToString:@"nodeContent"]) {
            result = [node objectForKey:key];
        }
    }
}
return result;
}
...