Я не могу анализировать данные XML с помощью GDataXML - PullRequest
0 голосов
/ 24 января 2012

Сначала я импортировал #import "GDataXMLNode.h" в .h файл. Теперь это мой 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.

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

Ответы [ 2 ]

1 голос
/ 25 января 2012
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);
    //}
}

РЕДАКТИРОВАТЬ: 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 голосов
/ 18 января 2013

Чтобы разрешить анализ, вам также может понадобиться изменить атрибут " xmlns " в теге

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

...