Kri*_*oks 2 xml cocoa objective-c
我有一个简单的XML,我需要从puid-list 获得第一个 ' id '.我找到了很多例子,但由于命名空间,他们都没有这么做.如何将id作为NSString获取?
PS:我在Mac上.
<genpuid songs="1" xmlns:mip="http://musicip.com/ns/mip-1.0#">
<track file="/htdocs/test.mp3" puid="0c9f2f0e-e72a-c461-9b9a-e18e8964ca20">
<puid-list>
<puid id="0c9f2f0e-e72a-c461-9b9a-e18e8964ca20"/>
</puid-list>
</track>
</genpuid>
Run Code Online (Sandbox Code Playgroud)
你应该用NSXMLParser.在代码中创建一个实例并告诉它解析:
NSData * XMLData = [myXMLString dataUsingEncoding:NSUnicodeStringEncoding];
NSXMLParser * parser = [[NSXMLParser alloc] initWithData:XMLData];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:YES]; // if you need to
[parser parse]; // start parsing
Run Code Online (Sandbox Code Playgroud)
那么你需要NSXMLParserDelegate在解析过程中实现获取回调的方法:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict{
/* handle namespaces here if you want */
if([elementName isEqualToString:@"puid"]){
NSString * ID = [attributeDict objectForKey:@"id"];
// use ID string, or store it in an ivar so you can access it somewhere else
}
}
Run Code Online (Sandbox Code Playgroud)
处理命名空间的注意事项:
如果设置了名称空间,elementName则是限定名称,因此可以有前缀(例如mip:puid)如果您在Mac上,NSXMLNode必须使用便捷类方法,localNameForName:并prefixForName:获取字符串的两个部分.
此外,您可能需要NXXMLParser委托方法parser:didStartMappingPrefix:toURI:和parser:didEndMappingPrefix:.
请注意,返回的名称NSXMLParser正是字符串中的名称(关于它们是否带有前缀).因此,很少有属性被命名mip:id,但如果你想要健壮,你也需要检查它.
| 归档时间: |
|
| 查看次数: |
5939 次 |
| 最近记录: |