• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Einige Blicke in fremde Welten dürft Ihr nun bestaunen und darüber abstimmen, welche davon Euch am meisten gefällt: hier geht es lang für Euer Voting --> Klick

RSS Parser CDATA berücksichtigen bei der "description"

mase_84

Jonagold
Registriert
28.02.10
Beiträge
23
Hi,

mein RSS Parser funktioniert soweit super. Nur die description mit CDATA wird nicht ausgelesen.
Kann mir vlt. jemand helfen, was ich an dem Code entsprechendes ändern muss?

Code:
[COLOR=#77482D]#import [/COLOR][COLOR=#CE2E24]"BlogRssParser.h"[/COLOR][COLOR=#CE2E24][COLOR=#77482d]#import [/COLOR]"BlogRss.h"[/COLOR]


[COLOR=#B731A1]@implementation[COLOR=#000000] BlogRssParser[/COLOR][/COLOR]


[COLOR=#b731a1]@synthesize[/COLOR] currentItem = [COLOR=#518187]_currentItem[/COLOR];
[COLOR=#b731a1]@synthesize[/COLOR] currentItemValue = [COLOR=#518187]_currentItemValue[/COLOR];
[COLOR=#b731a1]@synthesize[/COLOR] rssItems = [COLOR=#518187]_rssItems[/COLOR];
[COLOR=#b731a1]@synthesize[/COLOR] delegate = [COLOR=#518187]_delegate[/COLOR];
[COLOR=#b731a1]@synthesize[/COLOR] retrieverQueue = [COLOR=#518187]_retrieverQueue[/COLOR];




- ([COLOR=#b731a1]id[/COLOR])init{
    [COLOR=#b731a1]if[/COLOR](![[COLOR=#b731a1]super[/COLOR] [COLOR=#3c2280]init[/COLOR]]){
[COLOR=#B731A1][COLOR=#000000]        [/COLOR]returnnil[COLOR=#000000];[/COLOR][/COLOR]
    }
[COLOR=#6F41A8][COLOR=#000000]    [/COLOR][COLOR=#518187]_rssItems[/COLOR][COLOR=#000000] = [[[/COLOR]NSMutableArray[COLOR=#3c2280]alloc[/COLOR][COLOR=#000000]][/COLOR][COLOR=#3c2280]init[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
[COLOR=#B731A1][COLOR=#000000]    [/COLOR]returnself[COLOR=#000000];[/COLOR][/COLOR]
}


- ([COLOR=#6f41a8]NSOperationQueue[/COLOR] *)retrieverQueue {
[COLOR=#518187][COLOR=#000000]    [/COLOR][COLOR=#b731a1]if[/COLOR][COLOR=#000000]([/COLOR][COLOR=#b731a1]nil[/COLOR][COLOR=#000000] == [/COLOR]_retrieverQueue[COLOR=#000000]) {[/COLOR][/COLOR]
[COLOR=#6F41A8][COLOR=#000000]        [/COLOR][COLOR=#518187]_retrieverQueue[/COLOR][COLOR=#000000] = [[[/COLOR]NSOperationQueue[COLOR=#3c2280]alloc[/COLOR][COLOR=#000000]] [/COLOR][COLOR=#3c2280]init[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
[COLOR=#3C2280][COLOR=#000000]        [/COLOR][COLOR=#518187]_retrieverQueue[/COLOR][COLOR=#000000].[/COLOR]maxConcurrentOperationCount[COLOR=#000000] = [/COLOR][COLOR=#2633d5]1[/COLOR][COLOR=#000000];[/COLOR][/COLOR]
    }
[COLOR=#518187][COLOR=#000000]    [/COLOR][COLOR=#b731a1]return[/COLOR]_retrieverQueue[COLOR=#000000];[/COLOR][/COLOR]
}


- ([COLOR=#b731a1]void[/COLOR])startProcess{
    [COLOR=#b731a1]SEL[/COLOR] method = [COLOR=#b731a1]@selector[/COLOR](fetchAndParseRss);
[COLOR=#3C2280][COLOR=#000000]    [[[/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#33595d]rssItems[/COLOR][COLOR=#000000]] [/COLOR]removeAllObjects[COLOR=#000000]];[/COLOR][/COLOR]
[COLOR=#6F41A8][COLOR=#000000]    [/COLOR]NSInvocationOperation[COLOR=#000000] *op = [[[/COLOR]NSInvocationOperation[COLOR=#3c2280]alloc[/COLOR][COLOR=#000000]] [/COLOR][COLOR=#3c2280]initWithTarget[/COLOR][COLOR=#000000]:[/COLOR][COLOR=#b731a1]self[/COLOR][/COLOR]
                                                                     [COLOR=#3c2280]selector[/COLOR]:method 
                                                                       [COLOR=#3c2280]object[/COLOR]:[COLOR=#b731a1]nil[/COLOR]];
[COLOR=#518187][COLOR=#000000]    [[/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]retrieverQueue[COLOR=#3c2280]addOperation[/COLOR][COLOR=#000000]:op];[/COLOR][/COLOR]
    [op [COLOR=#3c2280]release[/COLOR]];
}


-([COLOR=#b731a1]BOOL[/COLOR])fetchAndParseRss{
[COLOR=#6F41A8][COLOR=#000000]    [/COLOR]NSAutoreleasePool[COLOR=#000000] *pool = [[[/COLOR]NSAutoreleasePool[COLOR=#3c2280]alloc[/COLOR][COLOR=#000000]] [/COLOR][COLOR=#3c2280]init[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
    
[COLOR=#6F41A8][COLOR=#000000]    [[/COLOR]UIApplication[COLOR=#3c2280]sharedApplication[/COLOR][COLOR=#000000]].[/COLOR]networkActivityIndicatorVisible[COLOR=#000000] = [/COLOR][COLOR=#b731a1]YES[/COLOR][COLOR=#000000];[/COLOR][/COLOR]
    
[COLOR=#0A830F][COLOR=#000000]    [/COLOR]//To suppress the leak in NSXMLParser[/COLOR]
[COLOR=#3C2280][COLOR=#000000]    [[[/COLOR][COLOR=#6f41a8]NSURLCache[/COLOR]sharedURLCache[COLOR=#000000]] [/COLOR]setMemoryCapacity[COLOR=#000000]:[/COLOR][COLOR=#2633d5]0[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
[COLOR=#3C2280][COLOR=#000000]    [[[/COLOR][COLOR=#6f41a8]NSURLCache[/COLOR]sharedURLCache[COLOR=#000000]] [/COLOR]setDiskCapacity[COLOR=#000000]:[/COLOR][COLOR=#2633d5]0[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
    
[COLOR=#CE2E24][COLOR=#000000]    [/COLOR][COLOR=#6f41a8]NSURL[/COLOR][COLOR=#000000] *url = [[/COLOR][COLOR=#6f41a8]NSURL[/COLOR][COLOR=#3c2280]URLWithString[/COLOR][COLOR=#000000]:[/COLOR]@"http://www.meinfeed.de"[COLOR=#000000]];[/COLOR][/COLOR]
    [COLOR=#b731a1]BOOL[/COLOR] success = [COLOR=#b731a1]NO[/COLOR];
[COLOR=#3C2280][COLOR=#000000]    [/COLOR][COLOR=#6f41a8]NSXMLParser[/COLOR][COLOR=#000000] *parser = [[[/COLOR][COLOR=#6f41a8]NSXMLParser[/COLOR]alloc[COLOR=#000000]] [/COLOR]initWithContentsOfURL[COLOR=#000000]:url];[/COLOR][/COLOR]
    [parser [COLOR=#3c2280]setDelegate[/COLOR]:[COLOR=#b731a1]self[/COLOR]];
[COLOR=#3C2280][COLOR=#000000]    [parser [/COLOR]setShouldProcessNamespaces[COLOR=#000000]:[/COLOR][COLOR=#b731a1]YES[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
[COLOR=#3C2280][COLOR=#000000]    [parser [/COLOR]setShouldReportNamespacePrefixes[COLOR=#000000]:[/COLOR][COLOR=#b731a1]YES[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
[COLOR=#3C2280][COLOR=#000000]    [parser [/COLOR]setShouldResolveExternalEntities[COLOR=#000000]:[/COLOR][COLOR=#b731a1]NO[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
    success = [parser [COLOR=#3c2280]parse[/COLOR]];
    [parser [COLOR=#3c2280]release[/COLOR]];
    [pool [COLOR=#3c2280]drain[/COLOR]];
    [COLOR=#b731a1]return[/COLOR] success;
}


- ([COLOR=#b731a1]void[/COLOR])parser:([COLOR=#6f41a8]NSXMLParser[/COLOR] *)parser didStartElement:([COLOR=#6f41a8]NSString[/COLOR] *)elementName namespaceURI:([COLOR=#6f41a8]NSString[/COLOR] *)namespaceURI 
 qualifiedName:([COLOR=#6f41a8]NSString[/COLOR] *)qualifiedName attributes:([COLOR=#6f41a8]NSDictionary[/COLOR] *)attributeDict{
    [COLOR=#b731a1]if[/COLOR]([COLOR=#b731a1]nil[/COLOR] != qualifiedName){
        elementName = qualifiedName;
    }
    [COLOR=#b731a1]if[/COLOR] ([elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"item"[/COLOR]]) {
[COLOR=#3C2280][COLOR=#000000]        [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR][COLOR=#518187]currentItem[/COLOR][COLOR=#000000] = [[[[/COLOR][COLOR=#518187]BlogRss[/COLOR]alloc[COLOR=#000000]][/COLOR]init[COLOR=#000000]][/COLOR]autorelease[COLOR=#000000]];[/COLOR][/COLOR]
    } [COLOR=#b731a1]else[/COLOR] [COLOR=#b731a1]if[/COLOR]([elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"title"[/COLOR]] || 
              [elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"link"[/COLOR]] ||
              [elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"pubDate"[/COLOR]] ||
              [elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"guid"[/COLOR]] ||
              [elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"description"[/COLOR]]) {
[COLOR=#518187][COLOR=#000000]        [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItemValue[COLOR=#000000] = [[/COLOR][COLOR=#6f41a8]NSMutableString[/COLOR][COLOR=#3c2280]string[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
    } [COLOR=#b731a1]else[/COLOR] {
[COLOR=#518187][COLOR=#000000]        [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItemValue[COLOR=#000000] = [/COLOR][COLOR=#b731a1]nil[/COLOR][COLOR=#000000];[/COLOR][/COLOR]
    }    
}


- ([COLOR=#b731a1]void[/COLOR])parser:([COLOR=#6f41a8]NSXMLParser[/COLOR] *)parser didEndElement:([COLOR=#6f41a8]NSString[/COLOR] *)elementName namespaceURI:([COLOR=#6f41a8]NSString[/COLOR] *)namespaceURI qualifiedName:([COLOR=#6f41a8]NSString[/COLOR] *)qName {
    [COLOR=#b731a1]if[/COLOR]([COLOR=#b731a1]nil[/COLOR] != qName){
        elementName = qName;
    }
    [COLOR=#b731a1]if[/COLOR]([elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"title"[/COLOR]]){
[COLOR=#518187][COLOR=#000000]        [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItem[COLOR=#000000].[/COLOR]title[COLOR=#000000] = [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItemValue[COLOR=#000000];[/COLOR][/COLOR]
    }[COLOR=#b731a1]else[/COLOR] [COLOR=#b731a1]if[/COLOR]([elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"link"[/COLOR]]){
[COLOR=#518187][COLOR=#000000]        [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItem[COLOR=#000000].[/COLOR]linkUrl[COLOR=#000000] = [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItemValue[COLOR=#000000];[/COLOR][/COLOR]
    }[COLOR=#b731a1]else[/COLOR] [COLOR=#b731a1]if[/COLOR]([elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"pubDate"[/COLOR]]){
[COLOR=#6F41A8][COLOR=#000000]        [/COLOR]NSDateFormatter[COLOR=#000000] *formatter = [[[/COLOR]NSDateFormatter[COLOR=#3c2280]alloc[/COLOR][COLOR=#000000]] [/COLOR][COLOR=#3c2280]init[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
[COLOR=#CE2E24][COLOR=#000000]        [formatter [/COLOR][COLOR=#3c2280]setDateFormat[/COLOR][COLOR=#000000]:[/COLOR]@"yyyy-MM-dd'T'HH:mm:ss'Z'"[COLOR=#000000]];[/COLOR][/COLOR]
[COLOR=#518187][COLOR=#000000]        [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItem[COLOR=#000000].[/COLOR]pubDate[COLOR=#000000] = [formatter [/COLOR][COLOR=#3c2280]dateFromString[/COLOR][COLOR=#000000]:[/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItemValue[COLOR=#000000]];[/COLOR][/COLOR]
        [formatter [COLOR=#3c2280]release[/COLOR]];
    }[COLOR=#b731a1]else[/COLOR] [COLOR=#b731a1]if[/COLOR]([elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"guid"[/COLOR]]){
[COLOR=#518187][COLOR=#000000]        [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItem[COLOR=#000000].[/COLOR]guidUrl[COLOR=#000000] = [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItemValue[COLOR=#000000];[/COLOR][/COLOR]
    }[COLOR=#b731a1]else[/COLOR] [COLOR=#b731a1]if[/COLOR]([elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"description"[/COLOR]]){
[COLOR=#518187][COLOR=#000000]        [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItem[COLOR=#000000].[/COLOR]description[COLOR=#000000] = [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItemValue[COLOR=#000000];[/COLOR][/COLOR]
    }[COLOR=#b731a1]else[/COLOR] [COLOR=#b731a1]if[/COLOR]([elementName [COLOR=#3c2280]isEqualToString[/COLOR]:[COLOR=#ce2e24]@"item"[/COLOR]]){
        [[[COLOR=#b731a1]self[/COLOR] [COLOR=#33595d]rssItems[/COLOR]] [COLOR=#3c2280]addObject[/COLOR]:[COLOR=#b731a1]self[/COLOR].[COLOR=#518187]currentItem[/COLOR]];
    }
}


- ([COLOR=#b731a1]void[/COLOR])parser:([COLOR=#6f41a8]NSXMLParser[/COLOR] *)parser foundCharacters:([COLOR=#6f41a8]NSString[/COLOR] *)string {
[COLOR=#518187][COLOR=#000000]     [/COLOR][COLOR=#b731a1]if[/COLOR][COLOR=#000000]([/COLOR][COLOR=#b731a1]nil[/COLOR][COLOR=#000000] != [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItemValue[COLOR=#000000]){[/COLOR][/COLOR]
[COLOR=#518187][COLOR=#000000]         [[/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItemValue[COLOR=#3c2280]appendString[/COLOR][COLOR=#000000]:string];[/COLOR][/COLOR]
     }
}


- ([COLOR=#b731a1]void[/COLOR])parser:([COLOR=#6f41a8]NSXMLParser[/COLOR] *)parser foundCDATA:([COLOR=#6f41a8]NSData[/COLOR] *)CDATABlock{
[COLOR=#0A830F][COLOR=#000000]    [/COLOR]// Irgendwas Hier !?!?![/COLOR]
}


- ([COLOR=#b731a1]void[/COLOR])parser:([COLOR=#6f41a8]NSXMLParser[/COLOR] *)parser parseErrorOccurred:([COLOR=#6f41a8]NSError[/COLOR] *)parseError{
[COLOR=#3C2280][COLOR=#000000]    [/COLOR][COLOR=#b731a1]if[/COLOR][COLOR=#000000](parseError.[/COLOR]code[COLOR=#000000] != [/COLOR]NSXMLParserDelegateAbortedParseError[COLOR=#000000]) {[/COLOR][/COLOR]
[COLOR=#6F41A8][COLOR=#000000]        [[/COLOR]UIApplication[COLOR=#3c2280]sharedApplication[/COLOR][COLOR=#000000]].[/COLOR]networkActivityIndicatorVisible[COLOR=#000000] = [/COLOR][COLOR=#b731a1]NO[/COLOR][COLOR=#000000];[/COLOR][/COLOR]
        [([COLOR=#b731a1]id[/COLOR])[[COLOR=#b731a1]self[/COLOR] [COLOR=#33595d]delegate[/COLOR]] [COLOR=#3c2280]performSelectorOnMainThread[/COLOR]:[COLOR=#b731a1]@selector[/COLOR](processHasErrors)
                                              [COLOR=#3c2280]withObject[/COLOR]:[COLOR=#b731a1]nil[/COLOR]
                                           [COLOR=#3c2280]waitUntilDone[/COLOR]:[COLOR=#b731a1]NO[/COLOR]];
    }
}






- ([COLOR=#b731a1]void[/COLOR])parserDidEndDocument:([COLOR=#6f41a8]NSXMLParser[/COLOR] *)parser {
    [([COLOR=#b731a1]id[/COLOR])[[COLOR=#b731a1]self[/COLOR] [COLOR=#33595d]delegate[/COLOR]] [COLOR=#3c2280]performSelectorOnMainThread[/COLOR]:[COLOR=#b731a1]@selector[/COLOR](processCompleted)
                                          [COLOR=#3c2280]withObject[/COLOR]:[COLOR=#b731a1]nil[/COLOR]
                                       [COLOR=#3c2280]waitUntilDone[/COLOR]:[COLOR=#b731a1]NO[/COLOR]];
[COLOR=#6F41A8][COLOR=#000000]    [[/COLOR]UIApplication[COLOR=#3c2280]sharedApplication[/COLOR][COLOR=#000000]].[/COLOR]networkActivityIndicatorVisible[COLOR=#000000] = [/COLOR][COLOR=#b731a1]NO[/COLOR][COLOR=#000000];[/COLOR][/COLOR]
}




-([COLOR=#b731a1]void[/COLOR])dealloc{
[COLOR=#518187][COLOR=#000000]    [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItem[COLOR=#000000] = [/COLOR][COLOR=#b731a1]nil[/COLOR][COLOR=#000000];[/COLOR][/COLOR]
[COLOR=#518187][COLOR=#000000]    [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]currentItemValue[COLOR=#000000] = [/COLOR][COLOR=#b731a1]nil[/COLOR][COLOR=#000000];[/COLOR][/COLOR]
[COLOR=#518187][COLOR=#000000]    [/COLOR][COLOR=#b731a1]self[/COLOR][COLOR=#000000].[/COLOR]delegate[COLOR=#000000] = [/COLOR][COLOR=#b731a1]nil[/COLOR][COLOR=#000000];[/COLOR][/COLOR]
    
[COLOR=#518187][COLOR=#000000]    [[/COLOR]_rssItems[COLOR=#3c2280]release[/COLOR][COLOR=#000000]];[/COLOR][/COLOR]
[COLOR=#3C2280][COLOR=#000000]    [[/COLOR][COLOR=#b731a1]super[/COLOR]dealloc[COLOR=#000000]];[/COLOR][/COLOR]
}


[COLOR=#B731A1]@end[/COLOR]

Lieben Dank
Matthias
 
einen kleinen Schritt bin ich der Lösung auf dem Spur.

Ich hab folgendes im Code geändert bzw. hinzugefügt:

Code:
- ([COLOR=#BB23A0]void[/COLOR])parser:([COLOR=#733AA7]NSXMLParser[/COLOR] *)parser foundCDATA:([COLOR=#733AA7]NSData[/COLOR] *)CDATABlock{    
[COLOR=#401A7F][COLOR=#000000]     [/COLOR][COLOR=#bb23a0]self[/COLOR][COLOR=#000000].[/COLOR][COLOR=#508187]currentItem[/COLOR][COLOR=#000000].[/COLOR][COLOR=#508187]description[/COLOR][COLOR=#000000] = [[[/COLOR][COLOR=#733aa7]NSString[/COLOR][COLOR=#000000] [/COLOR]alloc[COLOR=#000000]] [/COLOR]initWithData[COLOR=#000000]:CDATABlock [/COLOR]encoding[COLOR=#000000]:[/COLOR]NSUTF8StringEncoding[COLOR=#000000]];[/COLOR][/COLOR]


}

Jetzt wird die Description ausgelesen und angezeigt. Allerdings, und das ist bescheiden, werden die HTML Tags mit dargestellt. Wie kann ich die ignorieren?

Vlt. hierzu jemand eine Idee? :)

Danke und Grüße
 
Kannst Du mal ein Beispiel posten?

Alex
 
Danke! Konnte ich bereits mit hilfe von "NSString_stripHTML" lösen! :)