2011-12-24 3 views
2

У меня есть html-строка, которую я получаю от ответа веб-сайта. Все, что я там делаю, потрясающе, и у меня нет никаких проблем. Что мне нужно, это захватить только href атрибут внутри html. Каков наилучший подход для получения этого URL-адреса, который содержится в этом атрибуте. Я открыт для любых внешних библиотек, если это необходимо, я просто хочу максимально эффективно. Благодарю.Извлечение HTML-атрибута из строки iPhone

ответ

4

Используйте этот API для анализа кода HTML и выбора нужных элементов.

ElementParser - это облегченная структура, обеспечивающая легкий доступ к содержимому xml и html. Вместо того чтобы заблудиться в сложностях спецификаций HTML и XML, он стремится не скрывать их существенную простоту. Он не делает все, он стремится сделать «достаточно».

Источник: http://touchtank.wordpress.com/element-parser/


Вот пример того, как использовать ElementParser с вашим собственным примером. Надеюсь, это полезно.

Веселого Рождества! Ho-Ho-Ho

// Here you create the parser, don't forget to #import "Element.h" and #import "ElementParser.h" 
ElementParser * parser = [[ElementParser alloc] init]; 

// This is the HTML source code that you want to parse 
DocumentRoot* document = [parser parseHTML:@"<html><a href=\"http://google.com\">Google Link</a></html>"]; 

// Create an array where you will put all the <a></a> elements 
NSArray* elements = [document selectElements: @"a"]; 

// Iterate though the array, for each element pick the "href" attribute 
NSMutableArray* results = [NSMutableArray array]; 
for (Element* element in elements){ 
    NSString* snipet = [element attribute:@"href"]; 

    // Add the result for each element to the "results" array 
    [results addObject: snipet]; 
} 

// Print the results on the screen 
NSLog(@"%@",[results componentsJoinedByString: @"\n"]); 
+0

я на самом деле эти рамки в моем проекте прямо сейчас! Я не могу понять, как его использовать! На нем нет документации, а всего лишь короткого параграфа о том, как ее использовать. Это не вдаваться в подробности. Кто-нибудь понимает, как использовать ElementParser? Если да, не могли бы вы показать мне, как я могу извлечь этот атрибут 'href', используя его. Благодарю. – Eli

+0

Я дам ему попробовать себя и вернуться с более подробной информацией. – Dimme

+0

Ваш удивительный. Спасибо! – Eli

-1

Вы можете использовать NSRegularExpresion для извлечения URL из HTML тега.

NSString *regexStr = @"http?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?"; 
NSString * url = @"<a href=\"http://www.stackoverflow.org/\">stackoverflow</a>"; 
NSError *error; 
NSRegularExpression *testRegex = [NSRegularExpression regularExpressionWithPattern:regexStr options:0 error:&error]; 
if(testRegex == nil) NSLog(@"Error making regex: %@", error); 
NSRange range = [testRegex rangeOfFirstMatchInString:url options:0 range:NSMakeRange(0, [url length])]; 

NSString * href = [url substringWithRange:range]; 

Имейте в виду, что NSRegularExpression нуждается в IOS 4 или 5.

+0

-1 Вы не можете разобрать HTML с регулярным выражением. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Steve

+0

Если вы посмотрите на ответ, я не разбираюсь в HTML, если функция беспокойство, это просто соответствие url из строки ramdom ... – Ecarrion

+0

Который поддерживает, что они говорят. Текст в тексте документа, который содержит похожий URL, будет соответствовать. Как и текст из тега, который OP не интересует и т. Д. И т. Д. Если вы продолжаете пытаться сражаться со всеми этими возможностями с помощью регулярного выражения, вы дойдете до точки, где не только становится чрезвычайно сложным и трудноподдерживающим , но вы также можете оказаться в положении, когда то, что вы хотите сделать, не может быть выполнено с помощью регулярного выражения. – Steve