2012-01-24 4 views
0

Сначала я импортировал #import "GDataXMLNode.h" в .h файл. Теперь это мой XML, который я должен проанализировать с помощью парсера GDataXML.Я не могу разобрать данные xml, используя GDataXML

<SiteStats> 
    <visitor>1</visitor> 
    <uniqueVisitor>1</uniqueVisitor> 
    <orderCount>0</orderCount> 
    <revenue>null</revenue> 
    <conversionRate>0</conversionRate> 
    <newProduct>3</newProduct> 
    <outOfStockProduct>0</outOfStockProduct> 
</SiteStats> 

Теперь одно замечание состоит в том, что мой этот xml поступает из Интернета. Поэтому я использовал делегата NSUrlConnection для извлечения данных xml.

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    responseString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 
    NSLog(@"Response: %@",responseString); 
    // other stuff here... 
} 

Здесь я получаю responseString, а затем я разобрать его, используя следующий код. Но я не могу разобрать его.

xmlDocument = [[GDataXMLDocument alloc] initWithXMLString:responseString options:0 error:&errorOnStore]; 
if (nil == xmlDocument) { 
    NSLog(@"could not load xml file"); 
} 
else { 
    NSLog(@"Loading desire xml"); 
    NSLog(@"%@", xmlDocument.rootElement); 
    NSArray *getData = [[xmlDocument rootElement] elementsForName:@"SiteStats"]; 
    NSLog(@"%@",getData); 
    records = [[NSMutableArray alloc] init]; 
    //[records retain]; 
    if(getData.count !=0){ 
     NSLog(@"data has"); 
    } 
    //storing the car model in the mutable array 
    for(GDataXMLElement *e in getData){ 
     NSLog(@"Enering in the xml file"); 
     [records addObject:e]; 

     NSString *Visitor = [[[e elementsForName:@"visitor"] objectAtIndex:0] stringValue]; 
     NSLog(@"Visitor : %@",Visitor); 

     NSString *UVisitor = [[[e elementsForName:@"uniqueVisitor"] objectAtIndex:0] stringValue]; 
     NSLog(@"Unique Visitor : %@",UVisitor); 
    } 
} 

я могу получить это значение, когда я NSLog(@"%@", xmlDocument.rootElement);

GDataXMLElement 0x1a4290: {type:1 name:SiteStats xml:"<SiteStats><visitor>4</visitor><uniqueVisitor>3</uniqueVisitor><orderCount>0</orderCount><revenue>0</revenue><conversionRate>0</conversionRate><newProduct>3</newProduct><outOfStockProduct>0</outOfStockProduct></SiteStats>"} 

Но я использую NSLog(@"%@",getData); я не получаю никаких данных в getData массиве.

Может кто-нибудь сказать мне, где проблема? Заранее спасибо.

+0

где ошибка? возможно, также вывести вывод вашего NSLog –

+0

'NSLog (@"% @ ", getData);' print '(null)' .Пожалуйста, сообщите, как кто-нибудь мне помогает. –

+0

@ XSlash Я редактировал свой код. –

ответ

1
xmlDocument = [[GDataXMLDocument alloc] initWithXMLString:responseString options:0 error:&errorOnStore]; 
if (nil == xmlDocument)  
{ 
    NSLog(@"could not load xml file"); 
} 
else  
{ 
    NSLog(@"Loading desire xml"); 
    NSLog(@"%@", xmlDocument.rootElement); 

    // skip this bits, you're trying to retrieve wrong element 
    //NSArray *getData = [[xmlDocument rootElement] elementsForName:@"SiteStats"]; 
    //NSLog(@"%@",getData); 
    records = [[NSMutableArray alloc] init]; 
    //[records retain]; 
    //if(getData.count !=0) 
    //{ 
     //NSLog(@"data has"); 
    //} 
    //storing the car model in the mutable array 
    //for(GDataXMLElement *e in getData) 
    //{ 
     //NSLog(@"Enering in the xml file"); 
     //[records addObject:e]; 

     NSString *Visitor = [[[xmlDocument.rootElement elementsForName:@"visitor"] objectAtIndex:0] stringValue]; 
     NSLog(@"Visitor : %@",Visitor); 

     NSString *UVisitor = [[[xmlDocument.rootElement elementsForName:@"uniqueVisitor"] objectAtIndex:0] stringValue]; 
     NSLog(@"Unique Visitor : %@",UVisitor); 
    //} 
} 

EDIT: NSArray *getData = [[xmlDocument rootElement] elementsForName:@"SiteStats"]; в этой строке, вы пытаетесь получить неправильный элемент, элемент «SiteStats» уже корневой элемент, поэтому, когда вы делаете это немного кода, что вы пытаетесь сделать ищу «SiteStats» внутри «SideStats»

<SiteStats> 
    <SiteStats> 
     <visitor>1</visitor> 
     <uniqueVisitor>1</uniqueVisitor> 
     <orderCount>0</orderCount> 
     <revenue>null</revenue> 
     <conversionRate>0</conversionRate> 
     <newProduct>3</newProduct> 
     <outOfStockProduct>0</outOfStockProduct> 
    </SiteStats> 
</SiteStats> 

Вашего оригинальный код может работать, если ваш XML выглядит как выше

+0

Это должно заставить вас бегать достаточно –

+0

Можете ли вы рассказать мне, почему я не получаю данные в массиве ??? Хотя ваш ответ потрясающий. –

+1

см. Мое редактирование, надеюсь, что это понятно. –

0

чтобы разрешить разборе вам могут понадобиться изменить атрибут "xmln s "в теге

< HTML> по noNSxml. Если это не будет сделано, он будет неправильно разбираться.