【发布时间】:2010-10-29 18:59:52
【问题描述】:
在我的 iPhone 应用程序中,我有以下 NSString:
NSString *myxml=@"<students>
<student><name>Raju</name><age>25</age><address>abcd</address>
</student></students>";
如何解析这个字符串的 XML 内容?
【问题讨论】:
标签: iphone objective-c xml
在我的 iPhone 应用程序中,我有以下 NSString:
NSString *myxml=@"<students>
<student><name>Raju</name><age>25</age><address>abcd</address>
</student></students>";
如何解析这个字符串的 XML 内容?
【问题讨论】:
标签: iphone objective-c xml
下载: https://github.com/bcaccinolo/XML-to-NSDictionary
然后你只需这样做:
NSDictionary *dic = [XMLReader dictionaryForXMLString:myxml error:nil];
Result 是一个 NSDictionary *dic,其中包含字典、数组和字符串,具体取决于 XML:
{
students = {
student = {
address = abcd;
age = 25;
name = Raju;
};
};
}
【讨论】:
你应该使用 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);
}
【讨论】:
另一个答案是:不要使用 XML。改用 plist,它是使用 XML 编写的,但在 Objective-C 中更容易解析为不同的数据类型(例如,NSArray 具有将文件或 NSData plist 转换为 NSArray 的方法)。
【讨论】:
就像@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 {
}
将找到的字符串放入对象集合中。
【讨论】:
我认为 XMLDocument 的最佳等价物是AbacigilXQ Library。你应该看看它。我正在使用它。
【讨论】: