我正在创建一个iPhone应用程序,其中我必须使用来自服务URL的值。来自url的响应是XML格式.XML文件具有相同的名称属性多次,并且这些属性不是静态的。我的意思是否属性可能会不时增加。所以我无法理解如何在iPhone中使用该XML响应。
我的XML响应如下所示:
GetUserResponse xmlns="http://schemas.datacontract.org/2004/07"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <CompanyList> <User> <Address> <City>Alabaster</City> <State>Alabama</State> </Address> <Employee> <Name>DrJohn</Name> </Employee> </User> <User> <Address> <City>SanFransisco</City>> <State>California</State> </Address> <Employee> <Name>DrWilliams</Name> </Employee> </User> </CompanyList> </GetUserResponse>
事情是我不能说在这里有2个标签会有特定数量的标签。它们可能会或可能不会不时增加。我认为我们应该采取像计数项目和提取值的东西但无法理解如何?
答案 0 :(得分:0)
这是实现这一目标的众多方法之一。您只需获取attributeDict并使用键值解析其中的所有值。
NSString *element;
- (void) viewDidLoad {
[super viewDidLoad];
cityArr = [[NSMutableArray alloc] init];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
element = elementName;
if ([elementName isEqualToString:@“Address”]) {
// initialize stings to store values of child elements
cityStr = [NSMutableString alloc] init];
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([element isEqualToString:@“City”])
cityStr appendString:string];// Append Values
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@“Address”]) {
[cityArr addObject:cityStr]; // Add strings to array/dictionary and release string
}
}