Прочитайте знак «%» из xml в iphone - PullRequest
1 голос
/ 07 декабря 2011

Я искал свой пробник и нашел в Интернете различные решения, такие как:

Использование знака английского фунта в канале XML для чтения с iPhone

НЕ способен анализировать "&"

Специальные символы в NSString из HTML

Это и здесьтакже

но это не для меня плодотворно, так как после прочтения 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>

mполучить описание в виде строки:

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

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

, но поле описания в консоли становится пустым, и я не могу сохранить его в своей БД.

Просьба указать, как я могу читать и хранить специальные символыв мою базу данных.

Еще одна вещь, которую я узнал, что% - это ключевое слово для чтения знака%, но я не знаю, как и где его применять.

pls help !!!

РЕДАКТИРОВАТЬ: мой текущий код.

-(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 голосов
/ 07 декабря 2011

Отредактировано: - Hope ur Инициализация 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];

}

// затем освободить переменные ...

...