У меня есть html-строка, которую я получаю от ответа веб-сайта. Все, что я там делаю, потрясающе, и у меня нет никаких проблем. Что мне нужно, это захватить только href
атрибут внутри html. Каков наилучший подход для получения этого URL-адреса, который содержится в этом атрибуте. Я открыт для любых внешних библиотек, если это необходимо, я просто хочу максимально эффективно. Благодарю.Извлечение HTML-атрибута из строки iPhone
ответ
Используйте этот 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"]);
Вы можете использовать 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.
-1 Вы не можете разобрать HTML с регулярным выражением. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Steve
Если вы посмотрите на ответ, я не разбираюсь в HTML, если функция беспокойство, это просто соответствие url из строки ramdom ... – Ecarrion
Который поддерживает, что они говорят. Текст в тексте документа, который содержит похожий URL, будет соответствовать. Как и текст из тега, который OP не интересует и т. Д. И т. Д. Если вы продолжаете пытаться сражаться со всеми этими возможностями с помощью регулярного выражения, вы дойдете до точки, где не только становится чрезвычайно сложным и трудноподдерживающим , но вы также можете оказаться в положении, когда то, что вы хотите сделать, не может быть выполнено с помощью регулярного выражения. – Steve
я на самом деле эти рамки в моем проекте прямо сейчас! Я не могу понять, как его использовать! На нем нет документации, а всего лишь короткого параграфа о том, как ее использовать. Это не вдаваться в подробности. Кто-нибудь понимает, как использовать ElementParser? Если да, не могли бы вы показать мне, как я могу извлечь этот атрибут 'href', используя его. Благодарю. – Eli
Я дам ему попробовать себя и вернуться с более подробной информацией. – Dimme
Ваш удивительный. Спасибо! – Eli