0

起初我已经导入#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 来自 web.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数组中的任何数据。

谁能告诉我问题出在哪里?先感谢您。

4

2 回答 2

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);
    //}
}

编辑: NSArray *getData = [[xmlDocument rootElement] elementsForName:@"SiteStats"];在这一行中,您正在尝试检索错误的元素,元素“SiteStats”已经是根元素,所以当您执行那段代码时,您要做的是在“侧面统计”

<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 看起来像上面那样,您的原始代码可能会起作用

于 2012-01-25T03:59:31.243 回答
0

要允许解析,您可能还需要更改标签中的属性“ xmlns ”

<html>非NSxml 提供。如果不这样做,那么它将错误地解析。

于 2013-01-18T09:21:04.910 回答