2012-02-22 14 views
1

NSXMLParserに特有の問題が発生しました。NSXMLParserは、外部(ユニコード)文字を含む文字列を分割します。

何らかの理由で、すべてのノルウェー文字æ、øおよびåの前にあるすべての文字を切り捨てます。

しかし、問題は、すべての非AZの文字と同じであると思われる(すべての外国文字)

例:。

現実:MAL 出力:AL

現実:Leは聖歌デsirènes 出力:

:私はから文字列をプリントアウトしたログからのENEが

相続人の例

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 

ログイン:

2012-02-22 14:00:01.647 VotePlayClient[2776:207] found characters: Le chant des sir 
2012-02-22 14:00:01.647 VotePlayClient[2776:207] found characters: ènes 

あなたはそれが外国の手紙に遭遇した時はいつでも、それは新しい行にジャンプすることをはっきりと見ることができます。

私は、文字列やその何かを追加する方法を理解しなければならないと思います。ここで

はNSXMLParserファイルです:SearchXMLParser.h

#import <Foundation/Foundation.h> 
#import "Search.h" 

@interface SearchXMLParser : NSObject <NSXMLParserDelegate> 
{ 
NSMutableString *currentNodeContent; 
NSMutableArray *searchhits; 
NSMutableArray *trackhits; 

NSXMLParser *parser; 
Search *currentSearch; 
} 

@property (readonly, retain) NSMutableArray *searchhits; 
@property (readonly, retain) NSMutableArray *trackhits; 

-(id) loadXMLByURL:(NSString *)urlString; 

@end 

私はすでに答えをSOチェックし、類似した記事のカップルを発見した

#import "SearchXMLParser.h" 
#import "Search.h" 

@implementation SearchXMLParser 

@synthesize searchhits, trackhits; 

-(id) loadXMLByURL:(NSString *)urlString 
{ 
    searchhits   = [[NSMutableArray alloc] init]; 
trackhits   = [[NSMutableArray alloc] init]; 
NSURL *url  = [NSURL URLWithString:urlString]; 
NSData *data = [[NSData alloc] initWithContentsOfURL:url]; 
parser   = [[NSXMLParser alloc] initWithData:data]; 
parser.delegate = self; 
[parser parse]; 
return self;  
} 

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
if ([elementname isEqualToString:@"track"]) 
{ 
    currentSearch = [Search alloc]; 
} 

if ([elementname isEqualToString:@"track"]) 
{ 
    currentSearch.trackurl = [attributeDict objectForKey:@"href"]; 
} 
} 

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
if ([elementname isEqualToString:@"name"]) 
{ 
    [trackhits addObject:currentNodeContent]; 

} 

if ([elementname isEqualToString:@"track"]) 
{ 
    currentSearch.track = [trackhits objectAtIndex:0]; 
    currentSearch.artist = [trackhits objectAtIndex:1]; 
    currentSearch.album = [trackhits objectAtIndex:2]; 
    [trackhits removeAllObjects]; 

    [searchhits addObject:currentSearch]; 
    [currentSearch release]; 
    currentSearch = nil; 
    [currentNodeContent release]; 
    currentNodeContent = nil; 
} 
} 

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
NSLog(@"found characters: %@", string); 
currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

- (void) dealloc 
{ 
[parser release]; 
[super dealloc]; 
} 

@end 

SearchXMLParser.mが、この問題を明確に解決したものは何もありません。

誰でもこの問題を解明できますか? :)どんな助けも大歓迎です!

+0

を。 –

答えて

9

パーサ:foundCharacters:メソッドが正しく動作しません。 foundCharacters:メッセージは要素の文字を報告する

この

は、デリゲート、いくつかのパーサを送ることができ NSXMLParserDelegate Protocol Reference

パーサオブジェクトからです。文字列は現在の要素の文字コンテンツ全体の一部にすぎないため、が変更されるまで、文字の現在の累積に追加する必要があります()。

あなたはこのような何か(ARC)を試みることができる:エレメントが終了したとき(リセット)フラッシュ、見つかった文字を追加し、それを変更可能な文字列を使用

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    NSLog(@"found characters: %@", string); 
    if (!currentNodeContent) { 
     currentNodeContent = [[NSMutableString alloc] init]; 
    } 
    [currentNodeContent appendString:string]; 
} 

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    // your code here 

    // when you are done with the string: 
    currentNodeContent = nil; 
} 
+0

素晴らしい仕事:Dありがとう。 – fozoglu

関連する問題