Cómo eliminar los datos no deseados del resultado del análisis

estoy desarrollando una aplicación. En ese iam estoy usando el análisis xml. Ese archivo xml contiene las 4 etiquetas de categoría y otras etiquetas. Del archivo xml quiero obtener los datos de la etiqueta de categoría. Al momento de obtener los datos de categoría, cada vez imprimo la matriz de valores de categoría. Eso se muestra correctamente. Pero después de completar el análisis, se agregarán otros datos de etiqueta al último nombre de categoría. Mi código de análisis es el siguiente.

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if(self.presentvalue)
{
    [presentvalue appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{

if(![elementName compare:@"category"])
{
    [categories addObject:presentvalue];
    NSLog(@"%@",presentvalue);
    NSLog(@"Number of elements %@",categories);
}

}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"category"])
{
    presentvalue=[NSMutableString string];  
}
}

Y el contenido de mi archivo xml es como

    <lesson>
   <categories>
   <category id="1">1</category>
   <category id="2">2</category>
   <category id="3">3</category>
   </categories>
   <references>
    <reference id="1" type="youtube" categoryid="2" name="Boyles law">
    <url><![CDATA[http://www.youtube.com/watch?v=J_I8Y-i4Axc]]>
     </url>
    </reference>
    </references>
    </lesson>

De este xml obtuve los valores de matriz como 1,2,3http://www.youtube.com/watch?v=J_I8Y-i4Axc. De esta manera obtuve el resultado. Entonces, dígame cómo obtener los valores de categoría sin eso datos adicionales

preguntado el 10 de mayo de 12 a las 08:05

¿Puede incluir el resultado de esas declaraciones NSLog? ¿Está buscando obtener solo 1,2 y 3 en su matriz? -

3 Respuestas

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"category"]) {
    NSLog(@"Node is found correctly");
    if(presentvalue == nil)
        presentvalue = [NSMutableString string];
    else 
        [presentvalue setString:@""];
}
else {
    presentvalue = nil;
}

}


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{

[presentvalue appendString:string];
if (presentvalue) 
{
   [self.tempArray addObject:presentvalue]; // add this line. create a tempArray containing all the strings.
    presentvalue = nil;
}
}

esto debería ayudarte en tu análisis. Espero eso ayude. feliz codificación :)

contestado el 10 de mayo de 12 a las 08:05

No uso. Vendrá la misma salida. - user1381821

[self.tempArray addObject:presentvalue]; // agregue esta línea arriba de presentvalue = nil y elimine el NSLog en ese método. cree un tempArray que contendrá todas las cadenas. imprima el tempArray para verificar los resultados. - Anshuk-garg

coloque el control en su código de análisis xml. eso si el nombre del elemento inicial/final es categoría. agregue objetos a la matriz; de lo contrario, no haga nada. solo desmayarse

contestado el 10 de mayo de 12 a las 08:05

Lo primero es publicar el código de charectr encontrado y cdata encontrado también: Saad

El segundo es que no está asignando atributos a la matriz que están en categoría. ¿estás familiarizado con los atributos? - Saad

Primero, ya publiqué el código de mi carácter encontrado. Y no necesito esa dirección, así que no escribí el código cdata. Y segundo, no quiero los valores de atributo de categoría, solo necesito el valor de etiqueta de categoría. - user1381821

Creo que esta línea se ve extraña.

if(![elementName compare:@"category"])

¿No debería ser así? (sin !)

if([elementName compare:@"category"])

editado

Intenta reemplazar esto por didEndElement

if([elementName isEqualToString:@"category"])
{
    [categories addObject:presentvalue];
    presentValue = [NSMutableString string];
    NSLog(@"%@",presentvalue);
    NSLog(@"Number of elements %@",categories);
}

contestado el 10 de mayo de 12 a las 10:05

No debería ser if ([elementName isEqualToString:@"category"]) no tiene sentido usar compare:, y ciertamente no usar !compare. ¿Qué se supone que debe hacer la declaración? - jrturton

Exactamente. De todos modos, este no es el caso con este problema. - mrhangz

Creo que su presentValue todavía está apuntado después de didEndElement y se llamará a los personajes encontrados incluso si no es la etiqueta de categoría. Después de asignar el valor presente para la última categoría, no lo liberaste ni hiciste nada con él, por lo que aún apunta a la última. Intente asignar un nuevo valor presente en la función didEndElement. ¡Tienes que quitar el! Sin embargo, del "si" como dije antes. - mrhangz

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.