Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用NSXMLParser进行XML解析-我需要查看代码_Iphone_Objective C_Xml_Xml Parsing - Fatal编程技术网

Iphone 使用NSXMLParser进行XML解析-我需要查看代码

Iphone 使用NSXMLParser进行XML解析-我需要查看代码,iphone,objective-c,xml,xml-parsing,Iphone,Objective C,Xml,Xml Parsing,我只需要确认我正在正确地进行XML解析。我做错什么了吗 @interface RootViewController : UITableViewController <NSXMLParserDelegate> { NSXMLParser *parser; NSMutableArray *ordersList; BOOL orderIdFound; BOOL itemNameFound; BOOL priceFound;

我只需要确认我正在正确地进行XML解析。我做错什么了吗

@interface RootViewController : UITableViewController <NSXMLParserDelegate> 
{   
    NSXMLParser *parser;    
    NSMutableArray *ordersList; 

    BOOL orderIdFound;
    BOOL itemNameFound;
    BOOL priceFound;
    BOOL orderDateFound;
    BOOL deliveryDateFound;

    Order *orderObject;
}

@property (nonatomic, retain) NSMutableArray *ordersList;
@property (nonatomic, retain) NSXMLParser *parser;
@property (nonatomic, retain) Order *orderObject;

@end


@implementation RootViewController

@synthesize ordersList;
@synthesize parser;
@synthesize orderObject;

- (void)viewDidLoad 
{
    [super viewDidLoad];

    ordersList = [[NSMutableArray alloc]init];

    // Reading local XML file
    NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:@"orders" ofType:@"xml"];

    NSData *data = [[NSData alloc]initWithContentsOfFile:xmlFilePath];
    parser = [[NSXMLParser alloc]initWithData:data];
    parser.delegate = self;
    [parser setShouldResolveExternalEntities:YES];
    [parser parse];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{       
    if ([elementName isEqualToString:@"OrderId"])
    {           
        orderIdFound = YES;
        if(orderObject == nil)
        {
            orderObject = [[Order alloc]init];
        }
        else 
        {
            [ordersList addObject:orderObject];

            [orderObject release];
            orderObject = nil;
            orderObject = [[Order alloc]init];
        }
    }
    if ([elementName isEqualToString:@"ItemName"])
    {
        itemNameFound = YES;
    }
    if ([elementName isEqualToString:@"Price"])
    {
        priceFound = YES;
    }
    if ([elementName isEqualToString:@"OrderDate"])
    {
        orderDateFound = YES;   
    }
    if ([elementName isEqualToString:@"DeliveryDate"])
    {
        deliveryDateFound = YES;
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{    
    if([elementName isEqualToString:@"OrderId"])
    {
        orderIdFound = NO;      
    }
    if([elementName isEqualToString:@"ItemName"])
    {
        itemNameFound = NO;     
    }
    if([elementName isEqualToString:@"Price"])
    {
        priceFound = NO;        
    }
    if([elementName isEqualToString:@"OrderDate"])
    {
        orderDateFound = NO;        
    }
    if([elementName isEqualToString:@"DeliveryDate"])
    {
        deliveryDateFound = NO;
    }
}

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

    if(orderIdFound == YES)
    {
        orderObject.OrderId = [string integerValue];
        NSLog(@"orderId :: %i", orderObject.OrderId);

    }
    if(itemNameFound == YES)
    {       
        orderObject.ItemName = string;
        NSLog(@"itemName :: %@", orderObject.ItemName);
    }
    if(priceFound == YES)
    {       
        orderObject.Price = [string integerValue];
        NSLog(@"price :: %i", orderObject.Price);
    }
    if(orderDateFound == YES)
    {       
        orderObject.OrderDate = string;
        NSLog(@"orderDate :: %@", orderObject.OrderDate);
    }
    if(deliveryDateFound == YES)
    {       
        orderObject.DeliveryDate = string;
        NSLog(@"deliveryDate :: %@", orderObject.DeliveryDate);
    }
}
@接口RootViewController:UITableViewController
{   
NSXMLParser*解析器;
NSMutableArray*ordersList;
BOOL-orderIdFound;
BOOL-itemNameFound;
布尔-普莱斯发现;
BOOL-orderDateFound;
BOOL deliveryDateFound;
订单*订单对象;
}
@属性(非原子,保留)NSMutableArray*ordersList;
@属性(非原子,保留)NSXMLParser*解析器;
@属性(非原子,保留)顺序*orderObject;
@结束
@RootViewController的实现
@综合有序列表;
@综合语法分析器;
@合成有序对象;
-(无效)viewDidLoad
{
[超级视图下载];
ordersList=[[NSMutableArray alloc]init];
//读取本地XML文件
NSString*xmlFilePath=[[NSBundle mainBundle]pathForResource:@“orders”类型:@“xml”];
NSData*data=[[NSData alloc]initWithContentsOfFile:xmlFilePath];
parser=[[NSXMLParser alloc]initWithData:data];
parser.delegate=self;
[parser setShouldResolveExternalEntities:是];
[语法分析器解析];
}
-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName属性:(NSDictionary*)attributeDict
{       
if([elementName IsequalString:@“OrderId”])
{           
orderIdFound=是;
if(orderObject==nil)
{
orderObject=[[Order alloc]init];
}
其他的
{
[ordersList addObject:orderObject];
[订单对象发布];
orderObject=nil;
orderObject=[[Order alloc]init];
}
}
如果([elementName IsequalString:@“ItemName”])
{
itemNameFound=是;
}
if([elementName IsequalString:@“Price”])
{
pricefind=是;
}
if([elementName IsequalString:@“OrderDate”])
{
orderDateFound=是;
}
如果([elementName IsequalString:@“DeliveryDate”])
{
deliveryDateFound=是;
}
}
-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName
{    
if([elementName IsequalString:@“OrderId”])
{
orderIdFound=否;
}
如果([elementName IsequalString:@“ItemName”])
{
itemNameFound=否;
}
if([elementName IsequalString:@“Price”])
{
pricefind=否;
}
if([elementName IsequalString:@“OrderDate”])
{
orderDateFound=否;
}
如果([elementName IsequalString:@“DeliveryDate”])
{
deliveryDateFound=否;
}
}
-(void)解析器:(NSXMLParser*)解析器查找字符:(NSString*)字符串{
如果(orderIdFound==是)
{
orderObject.OrderId=[string integerValue];
NSLog(@“orderId::%i”,orderObject.orderId);
}
如果(itemNameFound==是)
{       
orderObject.ItemName=字符串;
NSLog(@“itemName::%@”,orderObject.itemName);
}
如果(priceFound==是)
{       
Price=[string integerValue];
NSLog(@“价格::%i”,orderObject.price);
}
如果(orderDateFound==是)
{       
orderObject.OrderDate=字符串;
NSLog(@“orderDate::%@”,orderObject.orderDate);
}
如果(deliveryDateFound==是)
{       
orderObject.DeliveryDate=字符串;
NSLog(@“deliveryDate::%@”,orderObject.deliveryDate);
}
}

除了内存泄漏之外,它看起来基本正常。任何对alloc、new、copy或retain的调用都需要通过发布(例如在dealloc中)进行平衡


另外,我建议不要在视图控制器中进行XML解析。XML解析是一个独立的问题,适合分解成一个独立的类。

运行代码时有问题吗?这似乎有效吗?您忘记了对retain的调用也需要释放。谢谢,我将在dealloc中释放解析器和其他对象。通常我最关心的代码是“if(orderObject==nil){orderObject=[[Order alloc]init];}else{[ordersList addObject:orderObject];[orderObject release];orderObject=nil;orderObject=[[Order alloc]init];}”我将把这个转移到单独的课堂:)谢谢,好的,我明白你想做什么了。XML是什么格式?从您的解析器来看,它看起来有点非结构化。您可以发布XML的示例吗?1 Hammer 5 2010年2月24日2010年2月28日11 Julia…顺便说一句,不要执行“[orderObject release];orderObject=nil;”而可以执行“self.orderObject=nil;”(因为该属性被保留)。整洁多了。