【问题标题】:How to parse the following XML?如何解析以下 XML?
【发布时间】:2010-10-12 06:54:52
【问题描述】:
<colors>
    <color colorName="Abracadabra" colorNumber="D51-2" rColor="209" gColor="224" bColor="229" colorCollection="Harmony" colorFamily="Shaded" rating="3" surfaces="" colorGroup="Blues" />
    <color colorName="Abyss" colorNumber="B50-1" rColor="233" gColor="247" bColor="249" colorCollection="" colorFamily="Clean" rating="3" surfaces="" colorGroup="Blues" />
<colors>

我正在从 Web 服务获取上述 XML 数据。我不知道如何解析它。我想要包含所有颜色名称的“colorNameArray”,包含所有颜色编号的“colorNumberArray”等等所有细节。带有解析器委托的代码是可观的。 谢谢你

【问题讨论】:

    标签: iphone objective-c ios4


    【解决方案1】:

    This 链接很好地理解了使用 nsxmlparser 进行 xml 解析。(提供示例代码)。

    这些值作为属性存在,因此可以从 nsxmlparser 的 didStartElement 委托方法的 attributeDict 中获取。

    例如:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 
    
     if([elementName isEqualToString:@"color"])
    {
        NSString* colorName = [attributeDict objectForKey:@"colorName"]];
    
    }   
    }
    

    一切顺利。

    【讨论】:

      【解决方案2】:

      只需使用简单的属性 XML Parsing 下面就是示例代码

      -(void)startParsingForFriendRequest:(NSString *)userID  
      {
      
          NSString *urlString = [NSString stringWithFormat:@"http://www.example.com/user_id=%@",userID];
          ////NSLog(@"urlString : %@",urlString);
          NSURL *xmlURL = [NSURL URLWithString:urlString];
      
          NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:xmlURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]autorelease];
      
          NSURLResponse *returnedResponse = nil;
          NSError *returnedError = nil;
          NSData *itemData  = [NSURLConnection sendSynchronousRequest:request returningResponse:&returnedResponse error:&returnedError];
          NSString *itemString = [[[NSString alloc] initWithBytes:[itemData bytes] length:[itemData length] encoding:NSUTF8StringEncoding]autorelease];
      
          //NSLog(@"itemString : %@",itemString);
      
      
          NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:itemData];       
          [xmlParser setDelegate:self];
      
          [xmlParser parse];
      
      }
      
      - (void)parserDidStartDocument:(NSXMLParser *)parser
      {
      
          ////NSLog(@"parserDidStartDocument");
      
      }
      
      - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
      {
          ////NSLog(@"parseErrorOccurred");
          NSString * errorString = [NSString stringWithFormat:@"Error (Error code %i )", [parseError code]];
          UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading data" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
          [errorAlert show];
          [errorAlert release];
      
      }
      
      - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
      
      {
          ////NSLog(@"didStartElement");
      
          //////NSLog(@"elementName : %@",elementName);
      
          //////NSLog(@"namespaceURI : %@",namespaceURI);
      
          //////NSLog(@"qualifiedName : %@",qualifiedName);
      
          ////NSLog(@"attributeDict : %@",attributeDict);
      
          [registerNewArr addObject:attributeDict];
      
      }
      
      - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
      {
          ////NSLog(@"foundCharacters");
      
      
      }
      
      - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
      
      {
          ////NSLog(@"didEndElement");
      
      
      }
      
      - (void)parserDidEndDocument:(NSXMLParser *)parser
      {
      
          if ([[[registerNewArr objectAtIndex:1]objectForKey:@"Transaction"]isEqualToString:@"loginxml"]) {
              [(LoginViewController *)obj getRegisterResult:registerNewArr];
      
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-13
        • 2012-06-14
        • 1970-01-01
        • 2013-03-12
        • 2015-12-09
        • 2011-12-29
        相关资源
        最近更新 更多