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

时间:2012-09-26 06:02:53

标签: iphone nsxmlparser

我正在创建一个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个标签会有特定数量的标签。它们可能会或可能不会不时增加。我认为我们应该采取像计数项目和提取值的东西但无法理解如何?

1 个答案:

答案 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
    }
}