在我的iPhone应用程序中,我有以下NSString:
NSString *myxml=@"<students>
<student><name>Raju</name><age>25</age><address>abcd</address>
</student></students>";
我如何解析此字符串的XML内容?
答案 0 :(得分:13)
下载: https://github.com/bcaccinolo/XML-to-NSDictionary
然后你只需:
NSDictionary *dic = [XMLReader dictionaryForXMLString:myxml error:nil];
结果是一个NSDictionary * dic,其中包含字典,数组和字符串,具体取决于XML:
{
students = {
student = {
address = abcd;
age = 25;
name = Raju;
};
};
}
答案 1 :(得分:10)
您应该使用NSXMLParser类
您的代码应如下所示:
@implementation MyClass
- (void)startParsing {
NSData *xmlData = (Get XML as NSData)
NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:xmlData] autorelease];
[parser setDelegate:self];
[parser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
NSLog(@"Started %@", elementName);
}
答案 2 :(得分:2)
另一个答案是:不要使用XML。使用plist代替,它使用XML编写,但在Objective-C中更容易解析为不同的数据类型(例如,NSArray有一个方法将文件或NSData plist转换为NSArray)。
答案 3 :(得分:0)
就像@Jon Hess提到的那样,只需为NSXMLParserDelegate的“可选”方法创建一个包装类。这些方法可以帮助您分离在解析xml时可能会发现有用的任务。
我找到的一个非常好的在线日志文件是Elegant XML parsing with Objective-C。 Phil Nash真的花了很多时间来展示解决方案的基础知识。这需要一个新的程序员并引导他/她完成整个设置。
加载xml可以修改@Jon Hess方法。
您可以设置:
-(void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
}
处理某些元素的事件。
同时实施:
-(void)parser:(NSXMLParser *)parser
foundCharacters:(NSString *)string {
}
将找到的字符串放入对象集合中。
答案 4 :(得分:0)
我认为与XMLDocument最相同的是AbacigilXQ Library。你应该看看它。我正在使用它。