CDATA

2009-07-08 14 views
11

साथ NSXMLParser का उपयोग करना मैं NSXMLParser के साथ आरएसएस फ़ीड को पार्स कर रहा हूँ और यह शीर्षक और अन्य तार लेकिन तत्वों में से एक के लिए ठीक काम कर रहा हैCDATA

<!CDATA <a href="http:image..etc> 

की तरह एक चित्र को है मुझे लगता है कि के रूप में कैसे जोड़ सकता हूँ मेरी मेरी तालिका में सेल छवि देखें? क्या मैं इसे एक छवि प्रकार के रूप में परिभाषित करूंगा?

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    
//NSLog(@"found this element: %@", elementName); 
currentElement = [elementName copy]; 
if ([elementName isEqualToString:@"item"]) { 
    // clear out our story item caches... 
    item = [[NSMutableDictionary alloc] init]; 
    currentTitle = [[NSMutableString alloc] init]; 
    currentDate = [ [NSMutableString alloc] init]; 
    currentSummary = [[NSMutableString alloc] init]; 
    currentLink = [[NSMutableString alloc] init]; 
} 

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{  
//NSLog(@"ended element: %@", elementName); 
if ([elementName isEqualToString:@"item"]) { 
    // save values to an item, then store that item into the array... 
    [item setObject:currentTitle forKey:@"title"]; 
    [item setObject:currentLink forKey:@"link"]; 
    [item setObject:currentSummary forKey:@"description"]; 
    [item setObject:currentDate forKey:@"date"]; 

    [stories addObject:[item copy]]; 
    NSLog(@"adding story: %@", currentTitle); 
} 

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
//NSLog(@"found characters: %@", string); 
// save the characters for the current item... 
if ([currentElement isEqualToString:@"title"]) { 
    [currentTitle appendString:string]; 
} else if ([currentElement isEqualToString:@"link"]) { 
    [currentLink appendString:string]; 
} else if ([currentElement isEqualToString:@"description"]) { 
    [currentSummary appendString:string]; 
} else if ([currentElement isEqualToString:@"pubDate"]) { 
    [currentDate appendString:string]; 
} 

}

उत्तर

4

CDATA का मुद्दा यह है कि है:

यह वही है मैं अपने पार्स करने के लिए उपयोग कर रहा हूँ है इसके भीतर कुछ भी हिस्सा के रूप में नहीं माना जाता है एक्सएमएल दस्तावेज़ का। तो यदि आपके पास सीडीएटीए में टैग हैं तो पार्सर उन्हें अनदेखा कर देगा।

मुझे लगता है कि यह सीडीएटीए विवरण तत्व में है। इसलिए आपको "विवरण" तत्व से मैन्युअल रूप से या पार्सर के किसी अन्य उदाहरण के माध्यम से टैग निकालने की आवश्यकता होगी।

+0

हाँ, वहाँ वहाँ में एक छवि यूआरएल है। मैं NSXMLParser का उपयोग कर एक छवि यूआरएल कैसे निकाल सकता हूं? – Xcoder

+0

सीडीएटीए अनुभाग के अंदर स्ट्रिंग पर एक नज़र डालें। यदि यह हमेशा वैध एक्सएमएल है, तो * उस * स्ट्रिंग पर NSXMLParser का एक और उदाहरण फायर करें। यदि यह मान्य एक्सएमएल नहीं है, तो आपको कुछ और करना होगा, उदाहरण के लिए, मैन्युअल रूप से टैग ढूंढें। – Justicle

+0

वर्डप्रेस जैसे सीएमएसएस में सीडीएटीए टैग में विवरण है। एक आईफोन कोडर को अपने ऐप के आरएसएस रीडर हिस्से में विवरण टेक्स्ट दिखाने के लिए कहा जाएगा, जैसे सभी आरएसएस पाठक करते हैं। गेब्रियल का जवाब समाधान है। –

20

आप उपयोग कर सकते हैं

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock 
{ 
    NSString *someString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding]; 
} 
+0

यह बहुत अच्छा काम करता है। यदि आपको आगे विश्लेषण करने की आवश्यकता है, तो बस एक और पार्सर बनाएं। – Mariano

+0

यह उन लोगों के लिए उत्तर होगा जो नौकरी पाने के लिए इसकी खोज करते हैं। यह बिल्कुल स्पष्ट नहीं है कि initWithData पाया गया NSData से एक वैध स्ट्रिंग देगा, लेकिन निश्चित रूप से जब आप इसे देखते हैं तो आप 'doh!' जाते हैं। :) मेरे लिए काम किया, +1। –

+0

@ गैब्रियल कृपया मेरा प्रश्न देखें http://stackoverflow.com/questions/43539307/how-to-post-string-with-special-character-using-xml-parsing-in-objective-c। मैं आपके कोड को कैसे सुन सकता हूं – Muju

संबंधित मुद्दे