解析iphone中的Html url

解析iphone中的Html url,html,ios,parsing,Html,Ios,Parsing,如何解析html文件 我需要span标记之间的数据 <div id=currency_converter_result>1 AED = <span class=bld>0.4765 ANG</span> 由于XHTML是XML,您可以考虑使用NSXMLPARSE: @interface HTMLParser: NSObject <NSXMLParserDelegate> // or whichever superclass you have {

如何解析html文件

我需要span标记之间的数据

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

由于XHTML是XML,您可以考虑使用NSXMLPARSE:

@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);
    }
}

希望有帮助。

由于XHTML是XML,可以考虑使用NSXMLPARSE:

@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);
    }
}

希望这有帮助。

如果您只需要标记“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]]);

或者,我更喜欢从xml或html数据创建NSDictionary并使用它。您可以使用library执行此操作。

如果只需要标记“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]]);
或者,我更喜欢从xml或html数据创建NSDictionary并使用它。您可以使用library执行此操作。

请查看以下内容:

基本用法:

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
    }
}
看看这个:

基本用法:

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
    }
}

如果你不需要跨结构,这在我看来是一个很好的方法。如果你不需要跨结构,这在我看来是一个很好的方法。我知道这很古老,但我刚刚遇到了这个。HTML不是XML。xHTML是,但通用HTML绝对不是有效的XML。XML要求每个打开的标记都有一个关闭标记。XML需要正确的标记嵌套。XML要求所有属性值都用引号括起来。HTML不需要这些。@maddy是的,没错,但谁在乎不一致的代码呢?至少我没有。如果我要创建一个网站,我只会使用XHTML。你错误地宣称HTML是XML。我只是简单地指出这一点。是的,如果有机会,使用xHTML是个好主意。但许多人需要解析他们无法控制的HTML或非xHTML的HTML。许多人需要担心不一致的HTML代码。这是生活中的一个事实。我知道这很古老,但我只是偶然发现了这个。HTML不是XML。xHTML是,但通用HTML绝对不是有效的XML。XML要求每个打开的标记都有一个关闭标记。XML需要正确的标记嵌套。XML要求所有属性值都用引号括起来。HTML不需要这些。@maddy是的,没错,但谁在乎不一致的代码呢?至少我没有。如果我要创建一个网站,我只会使用XHTML。你错误地宣称HTML是XML。我只是简单地指出这一点。是的,如果有机会,使用xHTML是个好主意。但许多人需要解析他们无法控制的HTML或非xHTML的HTML。许多人需要担心不一致的HTML代码。这是生活中的事实。