htmlファイルを解析するにはどうすればよいですか?iphoneでHtml URLを解析する
スパンタグの間にデータが必要です。
<div id=currency_converter_result>1 AED = <span class=bld>0.4765 ANG</span>
htmlファイルを解析するにはどうすればよいですか?iphoneでHtml URLを解析する
スパンタグの間にデータが必要です。
<div id=currency_converter_result>1 AED = <span class=bld>0.4765 ANG</span>
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);
}
}
は、この情報がお役に立てば幸いです。あなただけのタグ「スパン」を必要とする場合
あなたは私がXMLまたはHTMLデータからNSDictionaryのを作成すると、それに取り組むことを好む、などこの1
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]]);
としてNSRegularExpressionを使用したりすることができます。あなたはXML-to-NSDictionaryライブラリでそれを行うことができます。
構造をステップ実行する必要がない場合、これはIMOを実行するのに最適な方法です。 –
このチェックアウト: https://github.com/zootreeves/Objective-C-HMTL-Parser
基本的な使い方:
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はこれを必要としません。 – rmaddy
@maddyはい、そうですが、不適合コードが気になる人はいますか?少なくとも私はしません。もし私がウェブサイトを作っていたら、XHTMLだけを使うだろう。 –
HTMLがXMLであると誤って主張しました。私はそれを単に指摘しています。はい、チャンスがあれば、xHTMLを使うのは良い考えです。しかし、多くの人々は、xHTMLではないHTMLやHTMLを解析する必要があります。多くの人々は、「不適合な」HTMLコードについて心配する必要があります。それは人生の事実です。 – rmaddy