Question

J'essaie d'utiliser XPath pour analyser un document XML. Un de mes NSXMLElement ressemble à ce qui suit, hypothétiquement parlant:

<foo bar="yummy">

J'essaie d'obtenir la valeur de la barre d'attributs, mais toute interprétation du code que j'utilise me renvoie la barre = "woo", ce qui signifie que je dois effectuer d'autres traitements de chaîne pour pouvoir accéder à woo. et woo seul.

Essentiellement, je fais quelque chose comme

NSArray *nodes = [xmlDoc nodesForXPath:@"foo/@bar" error:&error];
xmlElement = [nodes objectAtIndex:0];

Y a-t-il un moyen d'écrire le code ci-dessus pour me donner un plat délicieux, par opposition à bar = " yummy " afin que je puisse me libérer de l'analyse de la chaîne?

Merci.

En supposant que TouchXML soit utilisé, existe-t-il toujours un moyen d'obtenir des résultats similaires? Comme dans le cas de la saisie de la valeur de l'attribut, sans l'attribut = "valeur" Cela oblige ensuite à analyser la chaîne pour extraire la valeur.

Était-ce utile?

La solution

L'API TouchXML est censée être une copie exacte de la mise en œuvre NSXML d'Apple. Elle devrait donc être identique, sauf que vous allez remplacer toutes les méthodes NS par les méthodes C.

  

Les classes TouxhXML sont directement mappées sur les classes NSXML. NSXMLNode - > CXMLNode , NSXMLDocument - > CXMLDocument , NSXMLElement - > CXMLElement . Pour des raisons évidentes, vous ne pouvez pas associer les classes NSXML et TouchXML.

     

Les méthodes TouxhXML sont également mappées directement vers les méthodes NSXML, mais seul un petit sous-ensemble de méthodes est pris en charge. Les noms constant et enum sont presque équivalents (CXML ... vs NSXML ...) mais les valeurs constantes ne seront pas équivalentes

référence

En utilisant soit les classes Apple régulières, soit le framework TouchXML, le code ci-dessous ne vous donnera que la chaîne "délicieux". pour votre exemple.

 NSArray *nodes = [xmlDoc nodesForXPath:@"./foo/@bar" error:&err];
 NSString *value = [[nodes objectAtIndex:0] stringValue];

Bonne chance,

Brian G

Autres conseils

Si vous essayez d'utiliser la classe NSXMLDocument sur un iPhone, vous allez être profondément déçu, car cette classe (et les classes NSXMLNode, NSXMLElement, etc. associées) n'est pas disponible sur le téléphone (elles sont disponibles dans le simulateur, ce qui peut être déroutant).

Jetez un coup d’œil à libxml2 pour effectuer une analyse syntaxique au téléphone. Il existe plusieurs frameworks gratuits (je crois que TouchXML en est un bon).

Cela étant dit, si vous souhaitez exécuter ce code sur un Mac, vous pouvez utiliser la méthode NSXMLElement -attributeForName: pour extraire uniquement l'attribut souhaité.

Ben a raison - bien que le code pour iPhone-SDK soit construit avec NSXMLDocument et s'exécute dans le simulateur, il ne fonctionnera pas du tout sur l'appareil. Les docs le mentionnent probablement quelque part, mais c'est assez obscur. TouchXML fait partie de TouchCode; vous pouvez trouver plus d'informations à ce sujet ici .

L'iPhone a accès à NSXMLParser, un joli petit analyseur de sax. Aaron Hillegass a un bon article sur l’utilisation de NSXMLParser. Il ne supporte pas XPath, mais est très pratique pour extraire XML dans vos objets de données.

Analyse du code XML dans le cacao

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top