为什么NSXMLParser在foundCharacters方法中拾取这个空格?

Bea*_*red 7 iphone nsxmlparser ipad ios

我正在学习如何NSXMLParser在iOS平台上使用API,到目前为止它非常易于使用.但是,我在foundCharacters方法中遇到了一个小问题.据我所知,它不应该拾取任何空格,因为该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];
       }       
    }
Run Code Online (Sandbox Code Playgroud)

它基本上将三个"时间"元素存储在一个数组中.然而,问题是它似乎以换行符的形式拾取空白.这是控制台中阵列的打印输出......

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

这是我正在处理的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>
     .
     .
     .
Run Code Online (Sandbox Code Playgroud)

我误解了这是如何工作的吗?

在此先感谢您的帮助!

Ste*_*ntz 6

简单的解决方案是创建一个didEndElement:设置currentElement为的方法kXMLElementOther.

有一个很好的说明Ignorable White Space,在忽略的空白.问题可能是您没有与文档关联的DTD.所以解析器实际上并不知道可忽略的空白是什么.(它不仅仅是标签之间的空白区域,这可能与您的想法相同)所以它只是将所有内容都视为字符数据.