簡體   English   中英

將xml數據解析為NSMutable Array列表

[英]parsing xml data into NSMutable Array list

我正在向服務器發送查詢並使用此代碼獲取響應

 NSString *urlString = @"myPHPQuery";
 NSURL *parserUrl = [[[NSURL alloc] initWithString:urlString] autorelease];
        NSXMLParser *parser = [[[NSXMLParser alloc] initWithContentsOfURL:parserUrl] autorelease];
        [parser setDelegate:self];
        [parser parse]; 

我可以得到這種回應

<users>
                            <username>nothan</username>
                            <score>1000</score>                         
                            </users>
<users>
                            <username>nothan</username>
                            <score>1000</score>                         
                            </users>

我正在使用此代碼來解析可變數組中的數據

int arrayCount = 0;

NSString *elementname;
NSInteger * count;

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{    
    elementname = elementName;
}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    if([elementname isEqualToString:@"username"])
    {
        if ( count == 0 )
        { 
            NSLog(@"%@" , string);
            [self.playerNames replaceObjectAtIndex:arrayCount withObject:string];
            arrayCount = arrayCount + 1;
            count = count + 1 ;
        }
        else
            count = 0;

    }
    else if([elementname isEqualToString:@"score"])
    {
        if ( count == 0 )
        {
            NSLog(@"%@" , string);

            [self.scores replaceObjectAtIndex:arrayCount withObject:string];
            count = count + 1 ;
        }
        else
            count = 0; 
    }
}

- (void)parserDidEndDocument:(NSXMLParser *)parser 
{

    for (int i = 0 ; i <10 ; i++)
    {
        NSLog(@"%d - %@" , i,[playerNames objectAtIndex:i]);
    }
}

此代碼的問題是,它僅檢索一個

<users> .... </users>如何更改此代碼以使其檢索更多用戶。

最好的祝福

對於上面發布的示例XML,解析器運行正確。

可擴展標記語言(XML)1.0(第五版)§2.1格式正確的XML文檔

僅存在一個元素,稱為根元素或文檔元素

解析第一個<users>…</users>元素之后,文檔已完成並且解析器停止。

要列出XML文檔中的內容,必須將它們包裝在外部元素中。

<allusers>
  <users>
    <username>nothan</username>
    <score>1000</score>                         
  </users>
  <users>
    <username>nothan</username>
    <score>1000</score>                         
  </users>
</allusers>

調用解析器foundCharacters方法時,將檢查int計數。 如果為零,則替換數組中的第一個條目,並增加計數。 在下一次調用此方法時,count不為零,因此什么也不會替換,然后將count設置回零。 對於下一次對此方法的調用,計數為零.....等等。

還請記住,當從網絡上檢索到的數據足夠大時,可以通過tcp / ip拆分為多個塊,那么initWithContentsOfURL可能不會全部返回。 最好使用NSURLConnection將接收到的數據構建為NSData對象,然后將其傳遞給解析器。 此外,對於給定元素,可能對FoundCharacters進行了多個調用,因此應建立接收到的元素,並應在委托didEndElement方法中將其放置到數組中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM