0

サービスのURLから値を消費する必要があるiPhoneアプリを作成しています。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

これは、それを行うための多くの方法の1つです。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 に答える