【问题标题】:NSXMLParser can not parse special characters (german & french)NSXMLParser 无法解析特殊字符(德语和法语)
【发布时间】:2012-09-26 09:31:35
【问题描述】:

我正在开发一个应用程序,该应用程序在私人服务器上进行搜索并将结果显示给用户。问题是 NSXLParser 无法解析特殊的德语和法语字符。例如:应该是:(Geschäftsführer) -> 我得到的是:(äftsführer)

我该如何解决这个问题?

这是我的代码:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([elementname isEqualToString:@"results"])
    {
        currentJob = [SearchResult alloc];
    }

}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{


    if ([elementname isEqualToString:@"jobTitle"])
    {
        currentJob.jobTitle = currentNodeContent;
    }

    if ([elementname isEqualToString:@"location"])
    {
        currentJob.shortAddress = currentNodeContent;
    }

    if ([elementname isEqualToString:@"companyName"])
    {
        currentJob.employer = currentNodeContent;
    }

    if ([elementname isEqualToString:@"results"])
    {
        [self.jobs addObject:currentJob];
        currentJob = nil;
        currentNodeContent = nil;
    }
}

任何帮助将不胜感激... 提前致谢

【问题讨论】:

  • 你能给出你正在解析的 XML 文件的链接吗?
  • 您的 foundCharacters 方法也有误 - 即使是单个字符串值,您也可以多次调用此函数

标签: objective-c xml parsing special-characters nsxmlparser


【解决方案1】:

您的foundCharacters 方法应将字符串附加到 NSMutableString 对象,因为它可以为单个值多次调用。在didStartElement中,初始化一个NSMutableString对象(我们称之为elementContentString),然后这样做:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)chars
{
    [self.elementContentString appendString:chars];
}

在您的didEndElement 中,您可以将内容作为字符串获取。请注意,您应该使用[NSString stringWithString:self.elementContentString] 制作它的非可变副本(这样您就不会用下一个元素覆盖它)。

【讨论】:

  • 非常感谢!我使用了以下代码,它现在可以工作了。 if(!elementContentString) elementContentString = [[NSMutableString alloc] initWithString:string];否则 [elementContentString appendString:string];
  • 我有一个 ´ 字符导致我的解析器停止。我该如何处理?我的 foundCharacters 方法看起来就像 @kuba 建议的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 2014-03-25
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多