我正在尝试从xml获取字符串 nsdata *xmldata = [请求响应despondata];
NSString *stringData = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding];
loginParsingDelegate *loginResultParser = [[loginParsingDelegate alloc] init];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
[parser setDelegate:loginResultParser];
[parser parse];
NSString *filePath = [NSString stringWithFormat:@"%@/conf.plist", DOCUMENTS_FOLDER] ;
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] init];
NSString *city = [parsingResult objectForKey:@"city"];
但是当有口音时,这是错误的...示例: sao paulo =" sao paulo",但圣保罗我得到了"âpaulo"
怎么了?XML返回正确...
我已经使用简单的XML字符串
启动了您的代码<city>São Paulo</city>
看起来您在代表中没有正确处理字符。对于此XML - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
实际上被称为两次:首次使用" S",第二次与"âo paulo。您应该处理此类情况,因为无论如何都不能保证此方法为您提供完整的字符串。
解析器:fundchanter:
由解析器对象发送以提供其委托 代表当前元素字符的全部或 part 。
更新:
一个非常简单的例子。给定XML
<cities>
<city>São Paulo</city>
<city>Rio de Janeiro</city>
<city>Salvador</city>
</cities>
我们可以像这样做一个解析器
@implementation ParserClass {
NSMutableString *elementText;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
elementText = nil; // we are not handling elements other than "city"
if ([elementName isEqualToString:@"city"]) {
elementText = [NSMutableString new]; // prepare an empty string for city name
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[elementText appendString:string]; // append new characters to the element text
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// element did end - string now contains text of the element
if ([elementName isEqualToString:@"city"]) {
NSString *cityName = [elementText copy]; // now we have a full city name
...
}
}
...
@end
请注意,这是不是一个通用代码来解析任何XML。如果您了解萨克斯解析的工作原理,那么您当然可以写一个。