如何访问已解析的XML数据并在其他方法中使用它?

时间:2016-08-31 15:31:36

标签: objective-c xml nsxmlparser

我有一个带有注释的XML文件,该文件在我的文件底部有一个ID,我已经成功地使用了NSLog" ing"到控制台。我使用NSXMLParser通过foundComment方法查找注释。然后我在底部有一个GetUID方法,我想返回我的uid字符串。我不知道如何访问我的解析数据并在另一个单独的方法中使用它。任何帮助将不胜感激。

XML文件:

<audioTracks>0</audioTracks>
<!--7934fad5a3a -->

XMLParser.h

#import <Foundation/Foundation.h>

@interface MyXmlParserDelegate : NSObject <NSXMLParserDelegate>

@end

XMLParser.mm

#import "XMLParser.h"

@implementation MyXmlParserDelegate

- (void) parserDidStartDocument:(NSXMLParser *)parser {

}

- (void)parser:(NSXMLParser *)parser
foundComment:(NSString *)uid{

NSLog(@"UID: %@", uid);

}

- (void) parserDidEndDocument:(NSXMLParser *)parser {

}

@end

MAIN.mm

-(NSString *)GetUID {

        NSString * uid = nil;

        NSXMLParser *parser = [[NSXMLParser alloc] initWithData:MyData];

        MyXmlParserDelegate *parserDelegate = [[MyXmlParserDelegate alloc] init];
        [parser setDelegate:parserDelegate];


        [parser parse];

    return uid;

}

1 个答案:

答案 0 :(得分:1)

最佳答案取决于您需要解析器委托的可重用性。

如果MAIN对象是唯一的客户,那么您可以完全取消委托类,只需将self分配给GetUID中分配解析器的委托。

更一般的想法是保留您的委托级别,并将其视为&#34; uid finder&#34;。在这种形式中,它将包含一个公共uid属性,它将在解析期间初始化。 e.g。

// in the delegate
- (void)parser:(NSXMLParser *)parser foundComment:(NSString *)uid {
    NSLog(@"UID: %@", uid);
    self.uid = uid;
}

// in the customer
MyXmlParserDelegate *parserDelegate = [[MyXmlParserDelegate alloc] init];
parser.delegate = parserDelegate;
[parser parse];

修改

return parserDelegate.uid;

我们可以更加通用,但正确的方法将更多地取决于模型的性质以及XML解析过程需要概括的程度。

附注:习惯上将类和源文件命名为相同,因此MyXmlParserDelegate实现文件更好地命名为&#34; MyXmlParserDelegate.m&#34;。此外,除非您的实现包含C ++,否则它们应该具有&#34; .m&#34;扩展。