2010-03-19 70 views
0

我在我的简单的定制解析器类下面的方法,当我执行叫做:我的数据,我得到...解析XML:识别/获取特定元素的数据?

Found: OK 
Found: 046 3433 5674 3422 4456 8990 1200 5284 

我的问题是如何将我去加入到这个让我可以明确挑出数据元素的信息(见下文),有什么我可以添加到 - (无效)解析器:方法,我该怎么做?

<data version="1.0">2046 3433 5674 3422 4456 8990 1200 5284</data> 

这里是我的代码段:

// CLASS: 

@interface CustomParser : NSObject <NSXMLParserDelegate> { 
} 
-(void)parseFile:(NSString *)pathToFile; 
@end 

@implementation CustomParser 

-(void)parseFile:(NSString *)pathToFile { 
    NSLog(@"parseXMLFile ... \"%@\"", pathToFile); 
    NSURL *url = [NSURL fileURLWithPath:pathToFile]; 
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 
    [parser setDelegate:self]; 
    [parser parse]; 
    [parser release]; 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
    NSLog(@"Found: %@", string); 
} 
@end 

//CALLED: 
CustomParser *newParser = [[CustomParser alloc] init]; 
[newParser parseFile:fileOnDisk]; 

... more 

[newParser release]; 

//DATA: 
<!DOCTYPE tubinerotationdata> 
<turbine version="1.0"> 
<status version="1.0" result="200">OK</status> 
<data version="1.0"> 
    2046 3433 5674 3422 4456 8990 1200 5284 
</data> 
</turbine> 

加里

+0

我猜我需要添加一个实例变量来跟踪当前元素,我只是不知道如何设置该元素/标记名称解析器:foundCharacters:正在处理该变量。 – fuzzygoat 2010-03-19 19:45:58

回答

1

您需要实现didStartElementdidEndElement方法和使用实例变量来跟踪当前元素的名称和值。的

实施例的一种方式做到这一点:

//Instance variables: 
NSString *currentElementValue; 
NSString *statusValue; 
NSString *dataValue; 

在didStartElement:

currentElementValue = @""; 

在foundCharacters:

currentElementValue = [currentElementValue stringByAppendingString:string]; 
在didEndElement

if ([elementName isEqualToString:@"status"]) 
{ 
    statusValue = currentElementValue; 
} 
else 
if ([elementName isEqualToString:@"data"]) 
{ 
    dataValue = currentElementValue; 
} 

或者,您可以使用ivar来跟踪当前元素名称,并在foundCharacters中基于此设置statusValue和dataValue。

+0

谢谢,我会试一试,但那正是我正在寻找的。非常感激。 – fuzzygoat 2010-03-19 20:22:23