使用NSXMLParser解析核心数据对象

时间:2011-12-16 16:38:48

标签: iphone objective-c ios4 nsxmlparser

我的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

但我不确定如何将它用于正确的对象。

提前致谢。

2 个答案:

答案 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协议的全部内容:

http://developer.apple.com/library/ios/#documentation/cocoa/reference/NSXMLParserDelegate_Protocol/Reference/Reference.html