2010-08-22 16 views
7

我正在學習如何在iOS平臺上使用NSXMLParser API,並且到目前爲止它非常易於使用。然而,我在findCharacters方法中遇到了一個小問題。據我瞭解,它不應該拿起任何空格,因爲foundIgnorableWhitespace方法應該可以捕捉到,但它看起來像。這是我的代碼...爲什麼NSXMLParser在foundCharacters方法中選取了這個空格?

- (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:方法,其中您將currentElement設置爲kXMLElementOther

Ignorable White SpaceIgnorable White Space有很好的描述。問題可能是您沒有與文檔關聯的DTD。所以解析器實際上並不知道可用的空白是什麼。 (這不是簡單的標籤之間的空白區域,這可能就是您的想法)所以它只是將所有內容視爲字符數據。

+0

是的,這似乎已修復它。謝謝! – BeachRunnerFred 2010-08-22 03:14:17

+0

不要忘記將你的問題標記爲已回答:-) – 2010-08-22 03:24:56

2

我發現你的問題的回答做編輯在下面的代碼段

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

加入這行代碼

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

現在回答任何你在你的函數中找到「串」中提到上面用「stringToDisplay」

它爲我工作。希望它也能爲你工作。 享受編碼。

+0

這一個爲我做了詭計! – ngoue 2013-12-04 07:12:18

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 2013-12-04 07:11:39

相關問題