2011-05-21 20 views
7

Tengo un archivo XML que contiene algunos datos me gustaría usar:archivo XML de análisis con NSXMLParser - valores que consiguen

<?xml version="1.0" encoding="UTF-8" ?> 

<items> 
<item name="product" price="19.95" where="store"> 
This is the first product. 
</item> 

<item name="product2" price="39.95" where="online"> 
This is the second product. 
</item> 

<item name="product3" price="99.95" where="garagesale"> 
This is the third product. 
</item> 

</items> 

Si hice 4 matrices, una para el nombre, uno por el precio , uno para donde fue comprado y otro para su descripción, ¿cómo obtendría los datos en las matrices?

Me imaginé utilizando NSXMLParser, pero no pude obtener name, price, where o la descripción.

Estoy atascado en cómo hacer esto.

Cualquier ayuda apreciada.

+1

¿Has leído [la guía] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/XMLParsing/Articles/HandlingElements.html)? –

+0

Posible duplicado de [Mejor enfoque para el análisis XML en el iPhone] (http://stackoverflow.com/questions/842292/best-approach-for-xml-parsing-on-the-iphone) o [Simple XML Parsing] (http://stackoverflow.com/questions/3395237/simple-xml-parsing) o [Código XML de análisis en iPhone] (http://stackoverflow.com/questions/3616447/parsing-xml-code-on-iphone-sdk) o [Analizando XML en Cocoa] (http://stackoverflow.com/questions/1089737/parsing-xml-in-cocoa) o [NSXMLParser en iPhone ¿cómo lo uso?] (http://stackoverflow.com/ preguntas/2964503 /). Elige tu opción. –

+0

Este es un buen tutorial, pero una cosa es que no recibí ayuda. ¿Puede decirme por favor que puedo leer la cadena "Este es el primer producto"? –

Respuesta

15

primer lugar es necesario crear un objeto que hace el analizando. Instalará la instancia NSXMLParser, se configurará como delegate para el analizador y luego llamará al mensaje de análisis. También puede ser responsable de almacenar sus cuatro matrices de resultados:

NSXMLParser * parser = [[NSXMLParser alloc] initWithData:_data]; 
[parser setDelegate:self]; 
BOOL result = [parser parse]; 

el mensaje que está más interesado en implementar en sus objetos de delegado es didStartElement. Este chico recibe un llamado para cada elemento en tu archivo XML. En esta devolución de llamada puede agregar su nombre, precio &, donde los atributos a sus respectivas matrices.

- (void)parser:(NSXMLParser *)parser 
didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict 
{ 
    // just do this for item elements 
    if(![elementName isEqual:@"item"]) 
     return; 

    // then you just need to grab each of your attributes 
    NSString * name = [attributeDict objectForKey:@"name"]; 

    // ... get the other attributes 

    // when we have our various attributes, you can add them to your arrays 
    [m_NameArray addObject:name]; 

    // ... same for the other arrays 
} 
+0

Gracias, ahora entiendo algo de NSXMLParser. –

+0

@ jack-greenhill Sin problemas :) – RedBlueThing

0

usted tiene que considerar el diccionario de la etiqueta de elemento como una matriz y tres etiqueta (nombre, precio y dónde) como el objeto en el índice 0,1,2

3

en el método follwing

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 

    if([elementName isEqualToString:@"item"]) { 

     NSString *name=[attributeDict objectForKey:@"name"]; 
     NSString *price=[attributeDict objectForKey:@"price"]; 
     NSString *where=[attributeDict objectForKey:@"where"]; 
    } 
} 
3

para obtener el valor entre las etiquetas (por ejemplo, "Este es el primer producto.") Puede anular - (void) analizador: (NSXMLParser *) analizador foundCharacters: (NSString *) cadena

+0

¿Puede por favor explicar cómo hacer esto? Tengo el requisito exacto, es decir, para obtener el valor entre las etiquetas. –