【发布时间】:2011-06-10 08:45:51
【问题描述】:
我正在使用 NSXMLParser 来解析 XML 文件。为了不同的目的,我在我的应用程序中多次这样做。我有一个解析商店定位器的注释,一个解析来自某个 YouTube 频道的所有电影,最后一个解析自制的 XML 文件。
除了最后一个之外,所有解析器都工作得很好。由于某种原因,它会解析,即第一个节点很好,但随后会覆盖它。
这是我的解析器代码:
//Standard function parser: reading open tag
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];
if ([elementName isEqualToString:@"item"]) {
xmlArray = [[NSMutableDictionary alloc] init];
}
}
//Standard function parser: reading string
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([currentElement isEqualToString:@"created_time"]){
[xmlArray setObject:string forKey:currentElement];
NSLog(@"test 1 %@", string);}
}
//Standard function parser: reading close tag
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
Post *newPost = [[Post alloc] init];
NSLog(@"test %@", xmlArray );
newPost.created_time = [xmlArray objectForKey:@"created_time"];
[containerArray addObject:newPost];
[xmlArray release];
}
}
XML 如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<items>
<item>
<created_time>test</created_time>
<message>blabla</message>
<picture>http://www.trentshow.com/images/tada.jpg</picture>
</item>
</items>
日志输出如下:
2011-06-10 10:43:24.446 TabbedCalculation[1502:207] test 1 test
2011-06-10 10:43:24.448 TabbedCalculation[1502:207] test 1
2011-06-10 10:43:24.449 TabbedCalculation[1502:207] test 1
2011-06-10 10:43:24.450 TabbedCalculation[1502:207] test {
"created_time" = "\n";
}
我不明白为什么解析器会在 created_time 节点上循环 3 次。任何帮助都会很棒!
【问题讨论】:
-
替换 currentElement = [elementName copy];与 currentElement=elementName;
-
好吧,遗憾的是它没有给出任何改变。还是一样的日志。
-
使用 NSLog(@"%@",currentElement); currentElement=[elementName 副本]之后;并查看它是否正确打印 currentElement。
标签: iphone objective-c ios nsxmlparser