所以在这里我被困在今天早上我的小项目中最简单的部分(或者我是这么想的)。目标是构建一个简单的 XML 解析器,它获取他们遇到的每个元素并将其添加到一个字典中,该字典最终将保存 xml 的所有键/值对。
所以像这样的xml
<xml>
<1stTag>text</1stTag>
<2ndTag>some more text</2ndTag>
</xml>
最终会出现在具有 2 个键/值对的字典中:
{
1stTag:text;
2ndTag:some more text;
}
采用 NSXMLParser 框架,我认为我只需将每个遇到的元素和文本存储在变量 self.elementInProgress 和 self.textInProgress(都是 NSStrings)中。元素完成后,我会将这对添加到字典中。
所以这里是 .h 文件:
@interface MSParser : NSObject <NSXMLParserDelegate>
{
NSString *elementInProgress;
NSString *textInProgress;
NSMutableDictionary *parsedXMLDict;
}
@property (nonatomic, retain) NSString *textInProgress;
@property (nonatomic, retain) NSString *elementInProgress;
@property (nonatomic, retain) NSMutableDictionary *parsedXMLDict;
以及实现文件中的相应函数:
@synthesize textInProgress, elementInProgress, parsedXMLDict;
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
[self.parsedXMLDict setValue:self.textInProgress forKey:self.elementInProgress];
NSLog(@"%@",[self.parsedXMLDict valueForKey:self.elementInProgress]);
}
现在,我在这里,难住我的 NSLog 返回 Null!我认为这很简单。我错过了什么?self.textInProgress 和 self.elementInProgress 都根据调试器正确填充。我可以将其追溯到我调用 setValue ForKey 的这一行,这又是根据文档,并且以前为我工作了不止一次。字典只是不接受值。根据文档,如果传递的 setValue 为 nil,它只会表现得有趣,这里不是……有什么想法吗?
一切看起来都不错,不是编译器错误或警告,它只是返回 Null。难过,就像我说的...