Frage

Ich versuche, XPath zu verwenden, um ein XML-Dokument zu analysieren. Einer meiner NSXMLElement der sieht wie folgt aus, hypothetisch gesprochen:

<foo bar="yummy">

Ich versuche, den Wert für das Attribut bar zu bekommen, aber jede Interpretation von Code, den ich verwende, gibt mir zurück bar = „woo“, was bedeutet, dass ich weiter Stringverarbeitung in tun müssen, um Zugang zu erhalten zu umwerben und woo allein.

Im Grunde mache ich so etwas wie

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

Gibt es trotzdem den Code oben zu schreiben, um mich nur lecker, gegen bar = „yummy“ so dass ich mich von Parsen der Zeichenfolge entlasten?

Danke.


Unter der Annahme, TouchXML verwendet wird, wird es trotzdem noch ähnliche Ergebnisse zu erhalten? Wie gerade den Wert für das Attribut in Grabben, ohne das Attribut = „Wert“? Das ergibt dann weiter mit der Zeichenfolge analysieren den Wert raus.

War es hilfreich?

Lösung

Die TouchXML API soll eine exakte Kopie von Apples NSXML Implementierung sein, so sollte es die gleiche, außer Sie sein werden ersetzt alle NS-Methode ist mit C-Methoden.

  

Die TouxhXML Klassen direkt die NSXML Klassen. NSXMLNode -> CXMLNode , NSXMLDocument -> CXMLDocument , NSXMLElement -> CXMLElement . Aus offensichtlichen Gründen kann man nicht mischen und NSXML und TouchXML Klassen entsprechen.

     

Die TouxhXML Methoden Karte direkt an NSXML Methoden auch, aber nur eine kleine Teilmenge von Methoden unterstützt werden. Constant und Enum-Namen sind fast gleichwertig (CXML ... vs NSXML ...), aber konstante Werte nicht equival sein

Referenz

Verwenden Sie entweder die regulären Klassen Apple oder den TouchXML Rahmen der folgende Code wird Ihnen nur die Zeichenfolge „yummy“ für Ihr Beispiel.

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

Good Luck,

Brian G

Andere Tipps

Wenn Sie versuchen, die NSXMLDocument Klasse auf einem iPhone zu verwenden, Sie gehen bitter enttäuscht sein, weil diese Klasse (und damit verbundene NSXMLNode, NSXMLElement, etc Klassen) am Telefon nicht verfügbar sind (sie sind in der Simulator, die verwirrend sein kann).

Werfen Sie einen Blick auf libxml2 XML-Analyse auf dem Telefon zu tun. Es gibt einige kostenlose Frameworks (ich glaube TouchXML gut ist), dies zu tun.

Dass gesagt wird, wenn Sie diesen Code auf einem Mac ausführen möchten, können Sie die NSXMLElement Methode -attributeForName: verwenden nur das Attribut ziehen Sie wollen.

Ben Recht - während der iPhone-SDK-Code mit NSXMLDocument bauen und im Simulator läuft, wird es nicht an alle auf dem Gerät arbeiten. Die docs erwähnen es wahrscheinlich irgendwo, aber es ist ziemlich unklar. TouchXML gehört Touchcode; Sie können mehr Informationen über sie hier .

finden

Das iPhone hat Zugriff auf NSXMLParser hat, die ein netter kleiner SAX-Parser ist. Aaron Hillegass hat einen guten Artikel über die Verwendung NSXMLParser. Dabei spielt es keine XPath unterstützen, aber es ist ziemlich praktisch bei XML in Ihre Datenobjekte Ripping.

Parsen von XML in Cocoa

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top