2010-08-22 13 views
7

Estoy aprendiendo a usar la API NSXMLParser para la plataforma iOS y hasta ahora es muy fácil de usar. Tengo un pequeño problema, sin embargo, en el método foundCharacters. Según lo entiendo, no debería recoger ningún espacio en blanco ya que se supone que el método foundIgnorableWhitespace capte eso, pero parece que sí lo está. Aquí está el código de mi ...¿Por qué NSXMLParser está recogiendo este espacio en blanco en el método foundCharacters?

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    //We're at the start of a new data feed 
    if([elementName isEqualToString:@"data"]) 
    { 
     if(listOfTimes != nil) 
      [listOfTimes release]; 

     listOfTimes = [[NSMutableArray alloc] init]; 
    } 

    else if ([elementName isEqualToString:@"start-valid-time"]) { 
     currentElementType = kXMLElementTime; 
     return; 
    } 

    else { 
     currentElementType = kXMLElementOther; 
    } 
//--------------------------------------------------------------------- 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
    { 
     if(currentElementType == kXMLElementTime) 
     { 
      //We don't want anymore than three times 
      if ([listOfTimes count] >= 3) 
       return; 

      [listOfTimes addObject:string]; 
     }  
    } 

Básicamente almacena tres elementos de "tiempo" en una matriz. El problema, sin embargo, es que parece estar recogiendo espacios en blanco en la forma de una nueva línea. Aquí está el listado de la matriz en la consola ...

Printing description of listOfTimes: 
(
    "2010-08-21T22:00:00-05:00", 
    "\n  ", 
    "2010-08-22T01:00:00-05:00" 
) 

y aquí está un fragmento de los datos XML Estoy procesamiento ...

<time-layout time-coordinate="local" summarization="none"> 
     <layout-key>k-p3h-n40-1</layout-key> 
     <start-valid-time>2010-08-21T22:00:00-05:00</start-valid-time> 
     <start-valid-time>2010-08-22T01:00:00-05:00</start-valid-time> 
     <start-valid-time>2010-08-22T04:00:00-05:00</start-valid-time> 
     <start-valid-time>2010-08-22T07:00:00-05:00</start-valid-time> 
     <start-valid-time>2010-08-22T10:00:00-05:00</start-valid-time> 
    . 
    . 
    . 

¿Estoy malentendido cómo funciona esto?

Gracias de antemano por su ayuda!

Respuesta

5

La solución fácil es crear un método didEndElement: donde establece currentElement en kXMLElementOther.

Hay una buena descripción de Ignorable White Space en Ignorable White Space. El problema es probablemente que no tiene una DTD asociada a su documento. Entonces, el analizador no sabe realmente qué espacio blanco es ignorable. (No es simplemente un espacio en blanco entre las etiquetas, que es probablemente lo que piensas) Por lo tanto, simplemente se trata todo como datos de caracteres.

+0

Sí, parece que lo ha solucionado. ¡gracias! – BeachRunnerFred

+0

No se olvide de marcar su pregunta como respondida :-) –

2

he encontrado la respuesta a su pregunta hacer la edición en siguiente fragmento de código

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

Añadir esta línea de código

NSString *stringToDisplay = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

Ahora Responder donde quiera que encuentre "cadena" en su función mencionada arriba con "stringToDisplay"

Me funcionó. Espero que funcione también para ti. Disfruta de la codificación.

+0

¡Este me fue el truco! – ngoue

3
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    //whatever data i am getting from node i am appending it to the nodecontent variable 
    [nodecontent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; 
    NSLog(@"node content = %@",nodecontent); 
} 
+0

¡Este me fue el truco! – ngoue

Cuestiones relacionadas