Pregunta

Estoy intentando usar XPath para analizar un documento XML. Uno de mis NSXMLElement se parece a lo siguiente, hipotéticamente hablando:

<foo bar="yummy">

Estoy tratando de obtener el valor para la barra de atributos, sin embargo, cualquier interpretación del código que use, me devuelve la barra de atrás = "woo", lo que significa que necesito hacer más procesamiento de cadenas para obtener acceso a woo y cortejar solo.

Esencialmente estoy haciendo algo como

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

¿Hay alguna forma de escribir el código de arriba para simplemente darme delicioso, frente a barra = " delicioso " ¿Entonces puedo liberarme de analizar la cadena?

Gracias.


Suponiendo que se está utilizando TouchXML, ¿hay todavía alguna forma de obtener resultados similares? Al igual que al capturar solo el valor del atributo, sin el atributo = " valor " ;? Eso hace que luego tenga que analizar más la cadena para obtener el valor.

¿Fue útil?

Solución

Se supone que la API TouchXML es un duplicado exacto de la implementación NSXML de Apple, por lo que debería ser la misma, excepto que reemplazarás todos los métodos NS con C-Methods.

  

Las clases TouxhXML se asignan directamente a las clases NSXML. NSXMLNode - > CXMLNode , NSXMLDocument - > CXMLDocument , NSXMLElement - > CXMLElement . Por razones obvias, no puede mezclar y combinar las clases NSXML y TouchXML.

     

Los métodos TouxhXML también se asignan directamente a los métodos NSXML, pero solo se admite un pequeño subconjunto de métodos. La constante y los nombres de enumeración son casi equivalentes (CXML ... vs NSXML ...) pero los valores constantes no serán equivalentes

referencia

Al usar las clases regulares de Apple o el marco TouchXML, el siguiente código le dará solo la cadena " yummy " por tu ejemplo

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

Buena suerte,

Brian G

Otros consejos

Si está tratando de usar la clase NSXMLDocument en un iPhone, se sentirá muy decepcionado porque esta clase (y las clases relacionadas NSXMLNode, NSXMLElement, etc.) no están disponibles en el teléfono (ESTÁN disponibles en El simulador, que puede ser confuso).

Eche un vistazo a libxml2 para realizar un análisis XML en el teléfono. Hay varios marcos gratuitos (creo que TouchXML es uno bueno) para hacer esto.

Dicho esto, si desea ejecutar este código en una Mac, puede usar el método NSXMLElement -attributeForName: para extraer solo el atributo que desee.

Ben's right - mientras que el código iPhone-SDK se compilará con NSXMLDocument y se ejecutará en el simulador, no funcionará en absoluto en el dispositivo. Los documentos probablemente lo mencionan en alguna parte, pero es bastante oscuro. TouchXML es parte de TouchCode; Puede encontrar más información al respecto aquí .

El iPhone tiene acceso a NSXMLParser, que es un pequeño y agradable analizador de saxofón. Aaron Hillegass tiene un buen artículo sobre el uso de NSXMLParser. No es compatible con XPath, pero es muy útil para copiar XML en sus objetos de datos.

Análisis de XML en Cocoa

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top