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 次 |
最近记录: |