2010-08-22 13 views
7

मैं आईओएस मंच के लिए NSXMLParser एपीआई का उपयोग करना सीख रहा हूं और अब तक इसका उपयोग करना बहुत आसान है। हालांकि, एक छोटी सी समस्या है, हालांकि, खोजकर्ताओं की विधि में। जैसा कि मैं इसे समझता हूं, इसे foundIgnorableWhitespace विधि को पकड़ने के लिए किसी भी सफेद जगह को नहीं लेना चाहिए, लेकिन ऐसा लगता है कि ऐसा है। यहाँ मेरी कोड है ...एनएसएक्सएमएल पार्सर खोजकर्ता विधि में इस सफेद जगह को क्यों उठा रहा है?

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    //We're at the start of a new data feed 
    if([elementName isEqualToString:@"data"]) 
    { 
     if(listOfTimes != nil) 
      [listOfTimes release]; 

     listOfTimes = [[NSMutableArray alloc] init]; 
    } 

    else if ([elementName isEqualToString:@"start-valid-time"]) { 
     currentElementType = kXMLElementTime; 
     return; 
    } 

    else { 
     currentElementType = kXMLElementOther; 
    } 
//--------------------------------------------------------------------- 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
    { 
     if(currentElementType == kXMLElementTime) 
     { 
      //We don't want anymore than three times 
      if ([listOfTimes count] >= 3) 
       return; 

      [listOfTimes addObject:string]; 
     }  
    } 

यह मूल रूप से एक सरणी में तीन "समय" तत्वों संग्रहीत करता है। हालांकि, समस्या यह है कि यह एक नई लाइन के रूप में व्हाइटस्पेस उठा रहा है। यहाँ कंसोल में सरणी के प्रिंटआउट है ...

Printing description of listOfTimes: 
(
    "2010-08-21T22:00:00-05:00", 
    "\n  ", 
    "2010-08-22T01:00:00-05:00" 
) 

और यहाँ XML डेटा मैं प्रसंस्करण कर रहा हूँ का एक टुकड़ा है ...

<time-layout time-coordinate="local" summarization="none"> 
     <layout-key>k-p3h-n40-1</layout-key> 
     <start-valid-time>2010-08-21T22:00:00-05:00</start-valid-time> 
     <start-valid-time>2010-08-22T01:00:00-05:00</start-valid-time> 
     <start-valid-time>2010-08-22T04:00:00-05:00</start-valid-time> 
     <start-valid-time>2010-08-22T07:00:00-05:00</start-valid-time> 
     <start-valid-time>2010-08-22T10:00:00-05:00</start-valid-time> 
    . 
    . 
    . 

मैं गलत समझ रहा हूँ कि यह कैसे काम करता है?

आपकी मदद के लिए अग्रिम धन्यवाद!

उत्तर

5

आसान समाधान didEndElement: विधि बनाना है जहां आप currentElementkXMLElementOther पर सेट करते हैं।

Ignorable White SpaceIgnorable White Space पर एक अच्छा विवरण है। समस्या यह है कि आपके पास आपके दस्तावेज़ से जुड़े डीटीडी नहीं है। तो पार्सर वास्तव में नहीं जानता कि सफेद जगह क्या है। (यह टैग के बीच बस सफेद जगह नहीं है, जो शायद आप सोचते हैं) तो यह केवल चरित्र डेटा के रूप में सबकुछ का इलाज कर रहा है।

+0

हाँ, ऐसा लगता है कि यह तय किया गया है। धन्यवाद! – BeachRunnerFred

+0

अपने प्रश्न को उत्तर के रूप में चिह्नित करना न भूलें :-) –

2

मैंने पाया अपने प्रश्न के लिए जवाब कोड की इस पंक्ति

NSString *stringToDisplay = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

अब उत्तर जहां कभी आप अपने समारोह में "स्ट्रिंग" लगता है उल्लेख कोड

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

का टुकड़ा निम्नलिखित में संपादन करते हैं जोड़े "stringToDisplay" के साथ ऊपर

यह मेरे लिए काम करता है। उम्मीद है कि यह आपके लिए भी काम करेगा। कोडिंग का आनंद लें।

+0

यह एक मेरे लिए चाल है! – ngoue

3
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    //whatever data i am getting from node i am appending it to the nodecontent variable 
    [nodecontent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; 
    NSLog(@"node content = %@",nodecontent); 
} 
+0

यह मेरे लिए चाल है! – ngoue

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