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

我正在学习在iOS平台上使用NSXMLParser 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]; } } 

它基本上将三个“时间”元素存储在一个数组中。 然而,问题是它似乎以换行的forms拾取空白。 这是控制台中arrays的打印输出……

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

这是我正在处理的XML数据的片段…

   k-p3h-n40-1 2010-08-21T22:00:00-05:00 2010-08-22T01:00:00-05:00 2010-08-22T04:00:00-05:00 2010-08-22T07:00:00-05:00 2010-08-22T10:00:00-05:00 . . . 

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

在此先感谢您的帮助!

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

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

 - (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); } 

我发现你的问题的答案在下面的代码中进行编辑

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

添加这行代码

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

现在回复你在上面提到的函数中使用“stringToDisplay”找到“string”的地方

它对我有用。 希望它也适合你。 享受编码。