\ n从xml服务获取值时出现而不是字符串

时间:2013-10-31 09:45:35

标签: ios objective-c xml parsing backslash

我试图通过解析通过websevice返回的xml数据来从服务器获取值。

用于解析的代码在

之下
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    rValue= @"";
    isTag = FALSE;
    if ([elementName caseInsensitiveCompare:@"BusinessName"] == NSOrderedSame)
        isTag=YES;

}


-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)strin{
if (isTag) {
        rValue =strin;
    }
}

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

    if([elementName caseInsensitiveCompare:@"BusinessName"] == NSOrderedSame)
        [myarray addObject:rValue];
}

-(void) parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"%@",myarray);
}

rValue是一个静态字符串;

打印完阵列后,看起来像这样,

(
"Book Store",
"Birch river grill",
PIC,
"Drink Juice",
"Cofee Cafee",
"Diag Block",
"Delici Store",
"\n\n",
"Spoon Fork",
"\n",
"\n\n",
"\n\n\n",
Allow,
"Enjoy Traveling",
"Grwing Three",
"\n",
"\n\n"
)

为什么\ n(反斜杠)出现而不是值(BusinessName)?    我在浏览器中检查了webservice,值正在返回    正确。完全有17个元素返回,你可以看到一些字符串打印在日志中没有双qoutes。这不是问题。但是,为什么会出现这样的情况。如何获得正确的值而不是反斜杠。

  • 我做错了什么?
  • 如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

由于foundCharacters可以在标记的每个内容中多次调用,因此这是不正确的:

-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)strin{
    if (isTag) {
        rValue =strin;
    }
}

您应该追加,而不是 strin分配给rValue。当前,实际值(例如,@"BusinessName")被识别并分配,但随后@"\n\n\n"延续字符串出现在同一标记内,并在最先找到的值之上分配。

rValue设为NSMutableString,并使用appendString,如下所示:

-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)strin{
    if (isTag) {
        [rValue appendString:strin];
    }
}

请注意,内容最后也有\n个。如果您不需要这些尾随字符,则需要手动删除它们,例如,通过调用stringByTrimmingCharactersInSet:并将其[NSCharacterSet whitespaceAndNewlineCharacterSet]作为参数传递:

NSString *finalValue = [rValue stringByTrimmingCharactersInSet:
    [NSCharacterSet whitespaceAndNewlineCharacterSet]
];