使用NSXMLParser在iPhone中解析具有相同名称属性的XML文件?

使用NSXMLParser在iPhone中解析具有相同名称属性的XML文件?

问题描述:

我正在创建一个iPhone应用程序,我必须使用服务url中的值。url的响应是XML格式.XML文件具有多次相同的名称属性,并且这些属性不是静态的。我的意思是属性可能会不时增加。所以我无法理解如何在iPhone中使用该XML响应。使用NSXMLParser在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个标签的here.They可能会或可能不时增加。我认为我们应该采取像计数数量的项目和提取的价值,但不明白如何?

+0

可以在下面的链接可以帮助你 [http://*.com/questions/12471774/cant-retrieve-xml-values-using-nsxmlparser/12472090#12472090][1] [1]:http://*.com/questions/12471774/cant-retrieve-xml-values-using-nsxmlparser/12472090#12472090 –

+0

在上面的XML中的每个标签是不同的,那么是什么问题? –

+0

我确实有两个标签,并且必须消耗它们的值。并且标签的编号可能会增加....我应该将它们放入数组还是....? – cutiepie

这是许多方法之一。您可以简单地获取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 
    } 
} 
+0

可以请你告诉我如何初始化字符串,如何将数值附加到数组.. ..因为我是移动平台的新手,我无法理解任何东西.... – cutiepie

+0

哦,我很抱歉..我会更新我的答案.. – Nina

+0

嘿如果,如果我想要消费Line1标签?这是代码Iam writing ..didStartElement {if([elementName isEqualToString:@“Address”]){cityStr = [[NSMutableString alloc] init]; line1Str = [[NSMutableString alloc] init];如果([element isEqualToString:@“Line1”]){[line1Str appendString:string];} didEndElement {if([elementName isEqualToString:@“Address”]){[cityArr addObject:cityStr]; [line1Arr addObject:line1Str];} NSLog(@“%@”,cityArr); NSLog(@“%@”,line1Str) ;。这里line1Arr打印空值。 – cutiepie