Vous devez utiliser NSXMLParser
. Créer une instance dans votre code et lui dire analyser:
NSData * XMLData = [myXMLString dataUsingEncoding:NSUnicodeStringEncoding];
NSXMLParser * parser = [[NSXMLParser alloc] initWithData:XMLData];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:YES]; // if you need to
[parser parse]; // start parsing
alors vous devez mettre en œuvre les méthodes de NSXMLParserDelegate
pour obtenir callbacks lors de l'analyse syntaxique:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict{
/* handle namespaces here if you want */
if([elementName isEqualToString:@"puid"]){
NSString * ID = [attributeDict objectForKey:@"id"];
// use ID string, or store it in an ivar so you can access it somewhere else
}
}
Remarques sur la manipulation namespaces:
Si les espaces de noms sont définis, elementName
est le nom qualifié, donc pourrait avoir préfixe (par exemple mip:puid
) Si vous êtes sur le Mac, NSXMLNode
a des méthodes de classe de commodité, localNameForName:
et prefixForName:
pour obtenir les deux parties de la chaîne.
En outre, vous pouvez utiliser les méthodes de délégué NXXMLParser
parser:didStartMappingPrefix:toURI:
et parser:didEndMappingPrefix:
.
Notez que les noms renvoyés par NSXMLParser
sont exactement ceux de la chaîne (en ce qui concerne leur préfixe). Il est donc rare que l'attribut soit nommé mip:id
, mais si vous voulez être robuste, vous devez également vérifier cela.
Êtes-vous sur un Mac ou un iPhone? Les iPhones ont seulement NSXMLParser, mais les Mac ont NSXMLDocument (qui supporte XPath). De plus, bien que vous ayez un espace de noms, il n'est utilisé nulle part. – JeremyP