2009-02-08 5 views
0

Je suis en train d'analyser une URL avec un & dans l'URL:URL de l'analyse d'un XML avec & dans ce

ViewArticle.dbml?DB_OEM_ID=1800&ATCLID=3664162 

..mais en utilisant NSXMLParser, tout ce que je reçois est 1800ATCL. Il ignore complètement le &.

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


    if ([elementName isEqualToString:@"title"]) { 
     self.contentOfCurrentNewsProperty = [NSMutableString string]; 
    }else if ([elementName isEqualToString:@"link"]){ 
     self.contentOfCurrentNewsProperty = [NSMutableString string]; 
    }else { 
     self.contentOfCurrentNewsProperty = nil; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{  
    if (qName) { 
     elementName = qName; 
    } 

    _currentElement = elementName; 

    if ([elementName isEqualToString:@"title"]) { 
     self.currentNewsObject.title = self.contentOfCurrentNewsProperty; 
    } else if ([elementName isEqualToString:@"link"]){ 
     self.currentNewsObject.link = self.contentOfCurrentNewsProperty; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if (self.contentOfCurrentNewsProperty) { 
     [self.contentOfCurrentNewsProperty appendString:string]; 
    } 
} 

Des idées? Merci

Edit:? J'ai fait un peu plus de tests et la ligne <?xml version="1.0" encoding="windows-1252"?> est ce qui salit vers le haut, mais cela est intégré dans le fichier xml, un moyen de contourner **

+0

Pourriez-vous reformater votre question et mettre un peu plus d'informations? – BobbyShaftoe

Répondre

0

Peut-être vous pouvez remplacer l'encodage en utilisant setCharacterEncoding

setCharacterEncoding:

Définit le codage de caractères du récepteur à l'encodage,

- (void)setCharacterEncoding:(NSString *)encoding

Paramètres:

  • codage

    Chaîne qui spécifie un codage; il doit correspondre au nom d'un jeu de caractères IANA. Voir http://www.iana.org/assignments/character-sets pour une liste de spécificateurs de codage valides.

    Généralement, le codage est spécifié dans la déclaration XML d'un document traité, mais il peut être défini à tout moment. Si le codage spécifié ne correspond pas au codage réel, l'analyse du document peut échouer.

1

(DBR: l'affiche originale utilise NSXMLParser, pas NSXMLDocument, donc il n'y a pas de méthode setCharacterEncoding pour lui passer outre.)

Pour l'OP: Pour tester votre situation, je l'ai écrit un Utilitaire de ligne de commande simple qui utilise NSXMLParser pour analyser un document XML avec l'instruction de traitement <?xml version="1.0" encoding="windows-1252"?>. L'analyse échoue toujours et le code d'erreur est 31, ce qui correspond à l'énumération NSXMLParserUnknownEncodingError. Pour résoudre ce problème, vous devrez peut-être pré-traiter vos données d'entrée. Une façon de le faire pourrait être d'utiliser [NSString stringWithCString:yourCstring encoding:NSWindowsCP1252StringEncoding], où yourCstring est un C char* standard contenant votre XML. Vous pouvez ensuite supprimer l'instruction de traitement <?xml version="1.0" encoding="windows-1252"?>, convertir le NSString en un NSData et le transmettre dans le NSXMLParser.

2

grâce à l'aide du y'all j'ai pu l'obtenir à l'aide d'aller

NSData *myData = [NSData dataWithContentsOfURL:URL]; 
    NSString *myStr = [[NSString alloc] initWithData:myData encoding:NSWindowsCP1252StringEncoding]; 
    myStr = [myStr stringByReplacingOccurrencesOfString:@"encoding=\"windows-1252\"" withString:@""]; 
NSLog(@"my str is %@", myStr); 

NSData* aData = [myStr dataUsingEncoding:NSUTF8StringEncoding]; 

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:aData]; 

tous les travaux maintenant, encore une fois merci.