Reputation: 120334
What is the right way to trim characters in foundCharacters
of NSXMLParser
?
I've found many examples that do it like this:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
NSString *characters = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
// Append to previous characters of the same element
}
Yet a space followed by a non-ASCII character is trimmed when I run the above. Example: "this é" will become "thisé".
Upvotes: 2
Views: 783
Reputation: 3300
This is what I've used in the past to trim whitespace without any problems.
- (NSString *)trim:(NSString *)inStr {
return [inStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
The only difference is that It's using a slightly different whitespace character set.
Upvotes: 0
Reputation: 90117
Yet a space followed by a non-ASCII character is trimmed when I run the above. Example: "this é" will become "thisé".
maybe by coincidence.
See the discussion of parser:foundCharacters:
The parser object may send the delegate several parser:foundCharacters: messages to report the characters of an element. Because string may be only part of the total character content for the current element, you should append it to the current accumulation of characters until the element changes.
And if the you trim the whitespace from this
(with a space at the end you can't see) and then from é
you will end up with thisé
.
I've never used NSXMLParser, but maybe you should trim the string in parser:didEndElement:namespaceURI:qualifiedName:
. From what I understand, the element will be completed then.
But I'm just guessing.
Upvotes: 2