我试图通过解析通过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。这不是问题。但是,为什么会出现这样的情况。如何获得正确的值而不是反斜杠。
答案 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]
];