Domanda

Sto cercando di usare XPath per analizzare un documento XML. Uno dei miei NSXMLElement è simile al seguente, ipoteticamente parlando:

<foo bar="yummy">

Sto cercando di ottenere il valore per la barra degli attributi, tuttavia qualsiasi interpretazione del codice che utilizzo, mi restituisce bar = " woo " ;, il che significa che devo eseguire un'ulteriore elaborazione delle stringhe per ottenere l'accesso a woo e corteggia da solo.

Essenzialmente sto facendo qualcosa del genere

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

Esiste un modo per scrivere il codice sopra per darmi solo buonissimo, contro bar = " buonissimo " così posso liberarmi dall'analisi della stringa?

Grazie.


Supponendo che TouchXML sia in uso, c'è ancora modo di ottenere risultati simili? Come nel prendere solo il valore dell'attributo, senza l'attributo = " valore " ;? Ciò comporta quindi ulteriori analisi della stringa per ottenere il valore.

È stato utile?

Soluzione

L'API TouchXML dovrebbe essere un duplicato esatto dell'implementazione NSXML di Apple, quindi dovrebbe essere la stessa tranne che sostituirai tutti i metodi NS con i metodi C.

  

Le classi TouxhXML si associano direttamente alle classi NSXML. NSXMLNode - > CXMLNode , NSXMLDocument - > CXMLDocument , NSXMLElement - > CXMLElement . Per ovvi motivi non puoi mescolare e abbinare le classi NSXML e TouchXML.

     

I metodi TouxhXML si associano direttamente anche ai metodi NSXML, ma è supportato solo un piccolo sottoinsieme di metodi. I nomi di costanti ed enum sono quasi equivalenti (CXML ... vs NSXML ...) ma i valori costanti non saranno equivalenti

riferimento

Usando le normali classi Apple o il framework TouchXML, il codice seguente ti fornirà solo la stringa " yummy " per il tuo esempio.

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

Buona fortuna

Brian G

Altri suggerimenti

Se stai cercando di utilizzare la classe NSXMLDocument su un iPhone, rimarrai fortemente deluso, perché questa classe (e le relative classi NSXMLNode, NSXMLElement, ecc.) non sono disponibili sul telefono (SONO disponibili in il simulatore, che può essere fonte di confusione).

Dai un'occhiata a libxml2 per eseguire l'analisi XML sul telefono. Esistono diversi framework gratuiti (credo che TouchXML sia un ottimo strumento) per farlo.

Detto questo, se vuoi eseguire questo codice su un Mac, puoi usare il metodo NSXMLElement -attributeForName: per estrarre solo l'attributo che desideri.

Ben ha ragione: mentre il codice iPhone-SDK verrà compilato con NSXMLDocument ed eseguito nel simulatore, non funzionerà affatto sul dispositivo. I documenti probabilmente lo menzionano da qualche parte, ma è abbastanza oscuro. TouchXML fa parte di TouchCode; puoi trovare ulteriori informazioni al riguardo qui .

L'iPhone ha accesso a NSXMLParser che è un buon parser per sax. Aaron Hillegass ha un buon articolo sull'uso di NSXMLParser. Non supporta XPath, ma è abbastanza utile per estrarre xml negli oggetti dati.

Analisi dell'XML in Cocoa

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top