我的XML文件类似于以下内容:
<title>some text
<Dog>founded characters to parse</Dog>
</title>
我使用了这个功能:
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
识别标签,但我想将标签之间的文字发送到我的NSManagedObject
例如:
if([elementName isEqualToString:@"title"])
{
[currentTitle setTitle:???????????];
}
我知道有这个功能:
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
但我不确定如何将它用于正确的对象。
提前致谢。
答案 0 :(得分:0)
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
是关键。基本上你将管理一个NSMutableString变量,它将填充值。然后,在-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
中,您将使用值设置属性。
此过程中有一个more detailed look。
答案 1 :(得分:0)
你的XML无效,所以我会给你一个更像这样的例子:
<title>
<Text>some text</Text>
<Dog>founded characters to parse</Dog>
</title>
您需要实现三个委托方法,并且您需要创建一个变量来保存发现的文本:
@property (nonatomic, retain) NSMutableString *currentValue;
- (id) init
{
if( (self = [super init]) )
{
NSMutableString *value = [[NSMutableString alloc] initWithCapacity:500];
self.currentValue = value;
[value release];
}
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
[self.currentValue setString:@""]; // Clear your string at the start of each tag
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[self.propertyValue appendString:string]; // append characters, this can be called multiple times
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
NSString *value = [self.propertyValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if( [elementName isEqualToString:@"dog"] ) {
dog.someProperty = value;
return;
}
if( [elementName isEqualToString:@"text"] ) {
currentTitle.title = value;
return;
}
}
所以你需要实现didStart,foundCharacters和didEnd。在didStart上,您可以根据找到的标记创建任何值对象。找到的字符通常始终实现相同,您只需附加它们......如果您愿意,也可以应用任何格式。结束是保存您的价值对象并释放任何资源的地方。我希望这对你有所帮助,它是NSXMLParserDelegate协议的全部内容: