从iphone中的xml中读取“%”符号

时间:2011-12-07 05:40:10

标签: iphone objective-c xml ios4 xml-parsing

我搜索了我的概率并在网上找到了各种解决方案:

Using the British pound sign in an XML feed to be read by an iPhone

NOt able to parse "&"

Special Characters in NSString from HTML

Thishere also

但是对我来说并不富有成效,因为在阅读xml后我将其保存在我的数据库中。

这是xml:

<root>
    −<Discounts>
        <DiscountID>1</DiscountID>
        <Title>WeekEnd Offers</Title>
        <Description>Offer upto 50%</Description>
        <SalePrice>50</SalePrice>
        <RegularPrice>100</RegularPrice>
        <CreatedDate>11/14/2011</CreatedDate>
        <LastModifiedDate>11/14/2011</LastModifiedDate>
        <Status>1</Status>
        <PhotoPath>/photos/documents/coupzila/hiteshi-logo.png</PhotoPath>
    </Discounts>
</root>

获取字符串中的描述:

  NSString * strDescription = [item.mdictXMLTagsData valueForKey:@"Description"];

    NSLog(@"String in description is : ",strDescription);

但是描述字段在控制台中变为空,我无法将其存储在我的数据库中。

请建议我如何阅读并将特殊字符存储到我的数据库中。

还有一件事让我知道&amp;#37是读取%符号的关键字,但我不知道n在哪里应用它。

请帮助!!!

编辑:我目前的代码。

-(void)CallAPIForDetails
{

//RequestType = 2;
//UIApplication sharedApplication].networkActivityIndicatorVisible=YES;

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
ParsingAPI *api = [[ParsingAPI alloc]init];
api.delegate = self;


NSString *strurl = [@"" stringByAppendingFormat: @"http://192.168.1.108/Coupzila/api/default.aspx?method=GetData&RequestType=Discounts&StoreID=%d",StoreId];

NSLog(@"URL : %@",strurl);
strurl = [strurl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

api.strEntityName=@"Discounts";

api.arrayXMLTags = nil; 
api.arrayXMLAttributeTags = nil;

[api parseXMLFileAtURL:[NSURL URLWithString:strurl] showProgress:NO];   

[api release];  
[pool release];

}

- (void)feedDataArray:(ParsingAPI *)feed didFindItemsArray:(NSMutableArray *)items
{
/*
 if(RequestType == 2 )
 {*/
NSMutableArray *arraydeleteDetails = [CoreDataAPIMethods getObjectsFromContext:@"DiscountsDetail" :@"DiscountId" :YES :self.managedObjectContext];

for (float i=0;i<[arraydeleteDetails count];i++) 
{
    [self.managedObjectContext deleteObject:[arraydeleteDetails objectAtIndex:i]];
    NSError *error;
    if (![self.managedObjectContext save:&error]) {
        // Handle the error...
    }
}   

for (float i=0;i<[items count];i++) 
{               
    ParsingItem *item = [items objectAtIndex:i];

    NSMutableArray *arr = [CoreDataAPIMethods getObjectsFromContext:@"DiscountsDetail" :@"Index" :NO :self.managedObjectContext];

    if ([arr count] > 0) 
    {
        DiscountsDetail * DiscountsDetailObject = [arr objectAtIndex:0];

        NewEntryID = [DiscountsDetailObject.Index intValue] +1;

    }
    else 
    {
        NewEntryID = 1;
    }

    /*
     if (countImage == 0) 
     {
     countImage = NewEntryID;

     }*/


    //Now add the data in database 
    DiscountsDetail *data = (DiscountsDetail*)[NSEntityDescription insertNewObjectForEntityForName:@"DiscountsDetail" inManagedObjectContext:self.managedObjectContext];

    data.DiscountId = [NSNumber numberWithInt:[[item.mdictXMLTagsData valueForKey:@"DiscountID"] intValue ]];
    data.Title = [item.mdictXMLTagsData valueForKey:@"Title"];
    data.SalePrize = [item.mdictXMLTagsData valueForKey:@"SalePrice"];
    data.RegularPrize = [item.mdictXMLTagsData valueForKey:@"RegularPrice"];
    //data.Description = @"This is test descriptionsakdj bfaisdfj bgasdlkab gfdil ufghiub nrungdfg bndfiosggn iouer5nn gdfnsngdfsu gndklfngdufn gkdfjlbgn lidsfub gdilufbf gldfb ghdfsiosa ifgho aibfg iodfb dfug hbdfg iygofadqi igdfhaibg adofibg ifdbgioadfbg adfigyb asg ig agiobfg finish" ;  


  NSString * strDescription = [item.mdictXMLTagsData valueForKey:@"Description"];

    NSXMLParser * parser = [item.mdictXMLTagsData valueForKey:@"Description"];

    [self parser:parser foundCharacters:strDescription];
    NSLog(@"String in description is : ",strDescription);

    data.Description =[item.mdictXMLTagsData valueForKey:@"Description"];
    data.Index = [NSNumber numberWithInt:NewEntryID];


    NSLog(@"Description is :",data.Description);


    if ([item.mdictXMLTagsData valueForKey:@"PhotoPath"] != nil)
    {

        NSString *photopath=@"http://192.168.1.108/Coupzila/";

        NSData *dataimage=[NSData dataWithContentsOfURL:[NSURL URLWithString:[photopath stringByAppendingString:[item.mdictXMLTagsData valueForKey:@"PhotoPath"]]]];

        data.ImageDiscounts = dataimage;

    }


    NSError *error;             

    if (![self.managedObjectContext save:&error])
    {
        // Handle the error...
    }

    self.arrayDiscountDetails = [CoreDataAPIMethods getObjectsFromContext:@"DiscountsDetail" :@"DiscountId" :NO :self.managedObjectContext];

}

}

1 个答案:

答案 0 :(得分:0)

编辑: - 希望你初始化currentParsedCharacter ......

这不是你的确切代码......但它应该是类似的......尝试一下,或者提供代码,我们可以帮助你做更好的事情。

-(id)init{
    if(self == [super init]){
        ObjectsMutableArray = [[NSMutableArray alloc] init];
        currentParsedCharacterData = [[NSMutableString alloc]init];
    }
    return self; 
}


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

}


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

    if([currentElement isEqualToString:@"Table"]) {
        obj = [[SomeClass alloc]init];
    }

    if ( [currentElement isEqualToString:@"Description"])
    {

        self.currentParsedCharacterData =(NSMutableString *) @"";
    }

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if([currentElement isEqualToString:@"OtherThanDescription"]) {
        obj.CatName=[NSString stringWithFormat:@"%@",string];
        NSLog(@"CatName to be saved in Array :- %@",string);
    }

    else if([currentElement isEqualToString:@"Description"]) {

        NSMutableString *outputBuilder =  [[NSMutableString alloc]init] ;

        [outputBuilder appendString:[NSString stringWithFormat:@"%@", self.currentParsedCharacterData]];

        [outputBuilder appendString:[NSString stringWithFormat:@"%@", string]];

        self.currentParsedCharacterData = outputBuilder;

        [outputBuilder release];
    }

    else 
    {
        self.currentParsedCharacterData = (NSMutableString *)string;
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"Table"]) {
        NSLog(@"Current element in End Element Category:- %@",currentElement);
        [ObjectsMutableArray addObject:obj];

    }
    if([elementName isEqualToString:@"Description"]) {
        obj.CatDesc = self.currentParsedCharacterData;
        NSLog(@"Current element in End Element Category:- %@",obj.CatDesc);

    }
    currentElement = @"";
}



- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    appDelegate = (AppDelegate_iPhone *)[[UIApplication sharedApplication] delegate];
    appDelegate.ObjectsArray = [[NSMutableArray alloc]initWithArray:ObjectsMutableArray];

}

//然后将变量解除它......