您应该使用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
,那么你需要实现的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
}
}
上处理的命名空间的注意事项如果命名空间已设置,则elementName
是合格名称,因此可能有前缀(例如mip:puid
)如果您在Mac上,NSXMLNode
必须使用方便的类方法,localNameForName:
和prefixForName:
获取字符串的两个部分。
此外,您可能需要NXXMLParser
委托方法parser:didStartMappingPrefix:toURI:
和parser:didEndMappingPrefix:
。
请注意,由NSXMLParser
返回的名称完全来自字符串的名称(关于它们是否带有前缀)。所以这个属性很少被命名为mip:id
,但是如果你想变得健壮,你也需要检查这个。
你在Mac或iPhone上? iPhone只有NSXMLParser,但Mac有NSXMLDocument(支持XPath)。而且,尽管你有一个名字空间,但它并没有在任何地方使用。 – JeremyP 2010-06-01 08:28:06