Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从另一个类调用已解析(NSXMLParser)xml的内容?代码审查?_Ios_Nsxmlparser - Fatal编程技术网

Ios 如何从另一个类调用已解析(NSXMLParser)xml的内容?代码审查?

Ios 如何从另一个类调用已解析(NSXMLParser)xml的内容?代码审查?,ios,nsxmlparser,Ios,Nsxmlparser,我试图在视图控制器中提供已解析xml文件的内容。当节点字符串的内容为空时,如何执行此操作 xml文件如下所示: <XML> <Data> <ID_Number>8</ID_Number> <Date> 13.12.2009</Date> <Time> 17:50:00</Time> <Temperature> 37.2 </Temperatur

我试图在视图控制器中提供已解析xml文件的内容。当节点字符串的内容为空时,如何执行此操作

xml文件如下所示:

<XML>
 <Data> 
    <ID_Number>8</ID_Number>
    <Date> 13.12.2009</Date>
    <Time>  17:50:00</Time>
    <Temperature> 37.2  </Temperature>
    <Speed>34.2</Speed>
    <Direction>90.4</Direction>
    <AirPressure>1040.3</AirPressure>
 </Data>
</XML>
m、 文件:

-(void)parserStart
{
NSURL *url = [NSURL URLWithString:myWebServiceXMLUrl];
NSData *data = [NSData dataWithContentsOfURL:url];

NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:data ];

NSString *xmlCheck = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"xmlCheck =%@", xmlCheck);

[xmlParser setDelegate:self];

[xmlParser parse];

}
.m文件中的委托方法,如: 迪德开始

if([elementName isEqualToString:@"Date"] ){
    self.mutableAcquiredDate = [[NSMutableString alloc]init];
    return;
}

if([elementName isEqualToString:@"Time"]){
    self.mutableAcquiredTime = [[NSMutableString alloc]init]; 
    return;
}

if([elementName isEqualToString:@"Temperature"]){
    self.mutableTemperatureValue = [[NSMutableString alloc]init];
    return;
}
.
.
.
主要字符:

[self.mutableTemperatureValue appendString:string];
[self.mutableWindSpeed appendString:string];
[self.mutableWindDirection appendString:string];
[self.mutableAirPressure appendString:string];
[self.mutableAcquiredDate appendString:string];
[self.mutableAcquiredTime appendString:string];
迪登德 . .

在viewController.h文件中

@property (strong, nonatomic) IBOutlet UILabel *labelWindSpeed;
@property (strong, nonatomic) IBOutlet UILabel *labelTemperatur;
@property (strong, nonatomic) IBOutlet UILabel *labelAirPressure;
@property (strong, nonatomic) IBOutlet UILabel *labelUpdateDateTime;
在viewController.m文件中

 //  Create Parser object and start parsing 
self.parser = [[Parser alloc]init];
[self.parser parserStart];

// Assigning the values from Parser Class to labels

// Date and Time
self.labelUpdateDateTime.text = self.parser.mutableAcquiredDate ;
NSLog(@"---------:%@", self.labelUpdateDateTime.text);// This gives all the contents of the xml nodes why?

 // Temperatur
myStartTemperatureValue = [self.parser.mutableTemperatureValue floatValue];
labelTemperatur.text = [NSString stringWithFormat:@"%.1f", myStartTemperatureValue];// This     works also correct.
如何从viewController中仅访问日期节点的内容,而不列出节点的所有内容。
谢谢…

我找到了将它们放入
NSMutableDictionary
的最简单方法,因为您可以通过它们的原始标记访问它们。在解析器的头文件中,声明

@property (strong, nonatomic) NSMutableDictionary *dic;
BOOL parsing;
NSString *title;
NSString *cont;
然后像这样使用代理

@synthesize dic;
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
parsing = YES;
title = elementName;
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if (parsing) {
NSMutableString *str1 = [[NSMutableString alloc] initWithCapacity:1000];
[str1 appendString:string];
if ([dic valueForKey:title] == nil) {
    [dic setValue:str1 forKey:title];
}
else{
    NSMutableArray *arr = [[NSMutableArray alloc] init];
    NSMutableArray *delete = [[NSMutableArray alloc] init];
    if ([[dic objectForKey:title] isKindOfClass:[NSMutableArray class]]){
        for (NSString *str in [dic objectForKey:title]){
            [arr addObject:str];
        }
        [arr addObject:str1];
        for (NSString *s in arr) {
            if ([s isEqualToString:@"\n"]) {
                [delete addObject:s];
            }
        }
        [arr removeObjectsInArray:delete];
        [dic setObject:arr forKey:title];
    }
    else{
        [arr addObject:[dic objectForKey:title]];
        [arr addObject:str1];
        for (NSString *s in arr) {
            if ([s isEqualToString:@"\n"]) {
                [delete addObject:s];
            }
        }
        [arr removeObjectsInArray:delete];
        [dic setObject:arr forKey:title];
    }
}
}
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if (parsing) {
parsing = NO;
}
}
这将根据它们在XML中的标记将它们全部插入
NSMutableDictionary*dic
,并通过从其他类调用来访问某些对象,如日期

[parser.dic objectForKey:@"Date"];

这还为具有多个同名节点的文件创建了一个数组,如果您使用dictionary,则通过
objectForKey:
和/或
valueForKeyPath:
@synthesize dic;
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
parsing = YES;
title = elementName;
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if (parsing) {
NSMutableString *str1 = [[NSMutableString alloc] initWithCapacity:1000];
[str1 appendString:string];
if ([dic valueForKey:title] == nil) {
    [dic setValue:str1 forKey:title];
}
else{
    NSMutableArray *arr = [[NSMutableArray alloc] init];
    NSMutableArray *delete = [[NSMutableArray alloc] init];
    if ([[dic objectForKey:title] isKindOfClass:[NSMutableArray class]]){
        for (NSString *str in [dic objectForKey:title]){
            [arr addObject:str];
        }
        [arr addObject:str1];
        for (NSString *s in arr) {
            if ([s isEqualToString:@"\n"]) {
                [delete addObject:s];
            }
        }
        [arr removeObjectsInArray:delete];
        [dic setObject:arr forKey:title];
    }
    else{
        [arr addObject:[dic objectForKey:title]];
        [arr addObject:str1];
        for (NSString *s in arr) {
            if ([s isEqualToString:@"\n"]) {
                [delete addObject:s];
            }
        }
        [arr removeObjectsInArray:delete];
        [dic setObject:arr forKey:title];
    }
}
}
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if (parsing) {
parsing = NO;
}
}
[parser.dic objectForKey:@"Date"];