2010-01-16 5 views
3

Je suis resté bloqué en essayant de détecter la paire de noms et la valeur des attributs dans certains xml généraux en utilisant libxml2 pour analyser l'API sur l'application iPhone. Pour mon projet, la vitesse d'analyse est vraiment importante, j'ai donc décidé d'utiliser libxml2 lui-même au lieu d'utiliser NSXMLParser. Maintenant, en référence à XMLPerformance qui est un exemple de SDK iPhone pour le benchmark d'analyse syntaxique entre NSXMLParser et libxml2, j'ai essayé d'obtenir le détail de l'attribut dans un gestionnaire d'analyseur XML comme ci-dessous, mais je ne sais pas exactement comment le détecter. J'ai vu the libxml2 document, mais je ne peux pas. S'il vous plaît aidez-moi si vous êtes grand pirate :)Comment obtenir le nom et la valeur des attributs de xml en utilisant libxml2 sax parser?

+0

La capacité doit être définie et non être un pollueur (NSNumber). C'est à dire. [NSMutableDictionary dictionaryWithCapacity: (NSUInteger) nb_attributes]; –

Répondre

5

De la recherche à la documentation liée je pense que quelque chose comme cela pourrait fonctionner:

for (int i=0; i<nb_attributes; i++) 
    { 
     // if(*attributes[4] != '\0') // something needed here to null terminate the value 
     NSString* key = [NSString stringWithCString: attributes[0] encoding: xmlencoding]; 
     NSString* val = [NSString stringWithCString: attributes[3] encoding: xmlencoding]; 
     [attributeDict setValue:val forKey:key]; 
     attributes += 5; 
    } 

Cela suppose qu'il ya toujours 5 pointeurs de chaîne pour chaque attribut. Comme il n'est pas noté autrement, je pense qu'il est sûr de supposer que la chaîne de valeur est terminée à zéro et que le pointeur de fin n'est donné que pour permettre un calcul de longueur facile. Dans le cas où le pointeur de fin ne pointe pas vers un caractère nul, vous devrez interpréter uniquement les caractères des attributs [3] jusqu'aux attributs [4] comme chaîne de valeur (longueur = attributs [4] - attributs [3]). Xmlencoding doit probablement être l'encodage du document/entité xml, sauf que libxml2 effectue déjà une conversion bien que cela semble improbable car il typedefs xmlChar à unsigned char.

+2

Merci, x4u! Enfin, cela fonctionne comme ça. NSString * clé = [NSString stringWithCString: (const char *) attributs [0] codage: NSUTF8StringEncoding]; NSString * val = [[NSString alloc] initWithBytes: attributs (const void *) [3] longueur: (attributs [4] - attributs [3]) codage: NSUTF8StringEncoding]; // il sera nécessaire // [val release]; – tksohishi

Questions connexes