2010-08-22 8 views
7

Ich lerne, um die NSXMLParser API für die iOS-Plattform zu verwenden, und bis jetzt ist es sehr einfach zu bedienen. Ich habe jedoch ein kleines Problem in der FoundCharacters-Methode. Wie ich es verstehe, sollte es keine Leerzeichen aufnehmen, da die foundIgnorableWhitespace Methode das fangen soll, aber es sieht so aus. Hier ist der My-Code ...Warum nimmt NSXMLParser dieses Leerzeichen in der foundCharacters-Methode auf?

Es speichert grundsätzlich drei "Zeit" -Elemente in einem Array. Das Problem ist jedoch, dass es Whitespace in Form einer Newline aufgreift. Hier ist der Ausdruck des Arrays in der Konsole ...

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

und hier ist ein Ausschnitt aus den XML-Daten I Verarbeitung bin ...

<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> 
    . 
    . 
    . 

Bin ich Missverständnis, wie das funktioniert?

Vielen Dank im Voraus für Ihre Hilfe!

Antwort

5

Die einfache Lösung besteht darin, eine didEndElement: Methode zu erstellen, bei der Sie currentElement auf kXMLElementOther setzen.

Es gibt eine gute Beschreibung von Ignorable White Space unter Ignorable White Space. Das Problem besteht wahrscheinlich darin, dass Ihrem Dokument keine DTD zugeordnet ist. Der Parser weiß also nicht, was für ein ignorierbarer Leerraum ist. (Es ist nicht einfach ein Leerzeichen zwischen Tags, das ist wahrscheinlich, was Sie denken) So behandelt es einfach alles als Zeichendaten.

+0

ja, das scheint es behoben zu haben. Danke! – BeachRunnerFred

+0

Vergessen Sie nicht, Ihre Frage als beantwortet zu markieren :-) –

2

fand ich die Antwort auf Ihre Frage in Bearbeitung tut folgendes Stück Code

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

Fügen Sie diese Codezeile

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

Jetzt antworten, wo immer Sie „string“ in Ihrer Funktion erwähnt finden oben mit "stringToDisplay"

Es funktionierte für mich. Hoffe, es wird auch für dich funktionieren. Viel Spaß beim Codieren.

+0

Dieser hat den Trick für mich gemacht! – 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

Dieser hat den Trick für mich gemacht! – ngoue