我正在寻找一种解码我的iPad应用程序的某些特殊字符(如μ,Λ,μ,ν,π)的XML实体的方法。我通过博客和问题花了几个小时才找到解决方案。
所以我找到了this并通过添加以下代码行修改了它,
else if ([scanner scanString:@"µ" intoString:NULL])
[result appendString:@"µ"];
else if ([scanner scanString:@"&Lambda" intoString:NULL])
[result appendString:@"Λ"];
else if ([scanner scanString:@"Π" intoString:NULL])
[result appendString:@"Π"];
但我觉得这不是一个好的解决方案。
所以,我正在寻找别人的帮助。
XCode4和iOS 4.3是我的开发环境。
答案 0 :(得分:1)
假设您已经决定手动执行此解析,而不是在委托中使用NSXMLParser和相应的实体调用,那么您可能希望使用表驱动的解析器。
从&在XML中总是引入一个实体,做这样的事情是安全的(假设你正在解析XML而不是HTML,它可以对允许的内容有一个非常宽松的定义):
if ([scanner scanString: @"&" intoString: nil]) {
NSString *entityNameString;
if ([scanner scanUpToString: @";" intoString: entityNameString]) {
NSString *entityValue =[entityDictionary objectForKey: entityNameString];
if (entityValue)
[result appendString: entityValue];
else {
// TODO: figure out if you want to blow an error, ignore the entity, or insert the original string
[result appendString: [NSString stringWithFormat: @"&%@;", entityNameString]];
}
} else {
// TODO: Determine if you want to blow an error, ignore, or insert the original string
[result appendString: @"&"];
}
}
entityDictionary将是表示每个实体及其代表的字符串的键值对的字典:
NSDictionary *entityDictionary = [NSDictionary dictionaryWithObjectsAndKeys: @"µ",@"micro", @"π", @"Pi",nil];
或者您可以使用以下方式从plist加载:
NSDictionary *entityDictionary = [NSDictionary dictionaryWithContentsOfURL: @"myEntityList.plist"];