简体   繁体   English

在iPhone中解析HTML网址

[英]Parsing Html url in iphone

How do I parse an html file? 如何解析HTML文件?

I need the data in between span tag. 我需要在span标签之间的数据。

<div id=currency_converter_result>1 AED = <span class=bld>0.4765 ANG</span>

If you need only tag 'span' you can use NSRegularExpression such as this one 如果只需要标记“ span”,则可以使用NSRegularExpression这样的

NSString *html = @"<div id=currency_converter_result>1 AED = <span class=bld>0.4765 ANG</span>";
NSRegularExpression *regex = [NSRegularExpression
                               regularExpressionWithPattern:@"<span[^>]*>(.+?)</span>"
                               options:NSRegularExpressionCaseInsensitive
                               error:nil];
NSTextCheckingResult *textCheckingResult = [regex firstMatchInString:html options:0 range:NSMakeRange(0, html.length)];
NSLog(@"found: '%@'", [html substringWithRange:[textCheckingResult rangeAtIndex:1]]);

or, I prefer to create a NSDictionary from xml or html data and work with it. 或者,我更喜欢从xml或html数据创建一个NSDictionary并使用它。 You can do it with XML-to-NSDictionary library. 您可以使用XML到NSDictionary库来实现。

Since XHTML is XML, you can consider using NSXMLParser: 由于XHTML是XML,因此可以考虑使用NSXMLParser:

@interface HTMLParser: NSObject <NSXMLParserDelegate> // or whichever superclass you have
{
    // own declarations
    NSMutableString *str;
    NSXMLParser *parser;
}

// somewhere in a method of self, for example, init, or something named -(void) parseHtml
- (void) parseHtml
{
    parser = [[NSXMLParser alloc] initWithData:[@"<div id=currency_converter_result>1 AED = <span class=bld>0.4765 ANG</span>" dataUsingEncoding:NSUTF8StringEncoding]];
    // of course you can substitute any string you want here, for example, the result of [NSString stringWithContentsOfFile:@"inex.html"] or whatever you need.
    parser.delegate = self;
    [parser parse];
    [parser release];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    if ([elementName isEqualToString:@"span"] && [[attributeDict objectForKey:@"class"] isEqualToString:@"bld"])
    {
        str = [NSMutableString string];
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    [str appendString:string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementName isEqualToString:@"span"])
    {
        // now str contains the value you want!
        DoSomethingWith(str);
    }
}

Hope this helps. 希望这可以帮助。

Check out this: https://github.com/zootreeves/Objective-C-HMTL-Parser 看看这个: https : //github.com/zootreeves/Objective-C-HMTL-Parser

Basic Usage : 基本用法:

NSError *error = nil;
NSString *htmlString = 
    @"<div id=currency_converter_result>1 AED = <span class=bld>0.4765 ANG</span>";
HTMLParser *p = [[HTMLParser alloc] initWithString:htmlString error:&error];

if (error) {
    NSLog(@"Error: %@", error);
    return;
}

HTMLNode *bodyNode = [p body];

NSArray *spanNodes = [bodyNode findChildTags:@"span"];

for (HTMLNode *spanNode in spanNodes) {
    if ([[spanNode getAttributeNamed:@"class"] isEqualToString:@"bld"]) {
        NSLog(@"%@", [spanNode rawContents]); //Answer to second question
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM