当我尝试使用NSXMLParser解析XML文件时,我无法解析所有元素。 XML响应如下所示:
<AList>
<Details>
<AId>1</AId>
<Date>10/31/2012</Date>
<Time>11:00 AM</Time>
<User>
<Employee>
<Name>Rosy</Name>
</Employee>
<Company>
<Customer>
<CustName>Williams</CustName>
<CustPhone>1232322</CustPhone>
</Customer>
</Company>
</User>
</Details>
<Details>
<AId>2</AId>
<Date>10/31/2012</Date>
<Time>11:30 AM</Time>
<User>
<Employee>
<Name>Mary</Name>
</Employee>
<Company>
<Customer>
<CustName>Christopher</CustName>
<CustPhone>123233323</CustPhone>
</Customer>
</Company>
</User>
</Details>
</AList>
如何获取所有XML标记中的所有元素?
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"AList"])
{
arr=[[NSMutableArray alloc] init];
}
if([elementName isEqualToString:@"Details"]||[elementName isEqualToString:@"User"])
{
drr=[[NSMutableDictionary alloc] init];
}
srr=[[NSMutableString alloc] init];
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
[srr appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"AId"])
{
[drr setObject:srr forKey:@"AId"];
[srr release],srr=nil;
return;
}
if([elementName isEqualToString:@"Date"])
{
[drr setObject:srr forKey:@"Date"];
[srr release],srr=nil;
return;
}
if([elementName isEqualToString:@"Time"])
{
[drr setObject:srr forKey:@"Time"];
[srr release],srr=nil;
return;
}
if([elementName isEqualToString:@"Name"])
{
[drr setObject:srr forKey:@"Name"];
[srr release],srr=nil;
return;
}
if([elementName isEqualToString:@"CustName"])
{
[drr setObject:srr forKey:@"CustName"];
[srr release],srr=nil;
return;
}
if([elementName isEqualToString:@"CustPhone"])
{
[arr addObject:drr];
}
if([elementName isEqualToString:@"AList"])
{
[drr release];
}
[srr release],srr=nil;
}
我不想要CustPhone ......我只能从我写的代码中找到CustName。我哪里出错?
答案 0 :(得分:0)
答案 1 :(得分:0)
你的&lt; / ALIST&GT; TAG与&lt;不同。 ALIST&GT; - 'L'。否则NSXMLParser可以在didFoundCharacters
委托中为您正确解析所有其他标签数据。
这是
中字符串比较的问题- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"AList"]) // in ur xml it is Alist
{
[drr release];
}
答案 2 :(得分:0)
请更改此
if([elementName isEqualToString:@"Details"]||[elementName isEqualToString:@"User"])
{
drr=[[NSMutableDictionary alloc] init];
}
到
if([elementName isEqualToString:@"Details"])
{
drr=[[NSMutableDictionary alloc] init];
}
找到客户电话元素时,您将字典添加到数组中。 您正在分配字典两次。找到“详细信息”和“用户”标记时。