0

我正在创建一个 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 个标签的特定数量的标签。它们可能会或可能不会不时增加。我认为我们应该采取类似计数项目数并提取值但不能不明白怎么办?

4

1 回答 1

0

这是许多方法之一。您可以简单地获取 attributeDict 并使用 key-value 解析其中的所有值。

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
    }
}
于 2012-09-26T07:53:07.063 回答