我试图通过解析通过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",
"nn",
"Spoon Fork",
"n",
"nn",
"nnn",
Allow,
"Enjoy Traveling",
"Grwing Three",
"n",
"nn"
)
为什么出现(反斜杠)而不是值(业务名称)?, 我在浏览器中检查了网络服务,值返回 正确。总共有 17 个元素返回,您可以看到一些字符串打印在日志中,没有双 qoutes。这不是问题。但是,为什么会出现这样。如何获得正确的值而不是反斜杠。
- 我做错了什么?
- 如何解决这个问题?
由于 foundCharacters
可以针对标签的内容多次调用,因此这是不正确的:
-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)strin{
if (isTag) {
rValue =strin;
}
}
与其将strin
分配给rValue
,不如附加它。目前,实际值(例如,@"BusinessName"
)被识别和分配,但随后@"nnn"
延续字符串出现在同一个标签中,并在首先找到的值之上分配。
使rValue
成为NSMutableString
,并使用appendString
,如下所示:
-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)strin{
if (isTag) {
[rValue appendString:strin];
}
}
请注意,内容末尾也会有 n
s。如果不需要这些尾随字符,则需要手动删除它们,例如,通过调用 stringByTrimmingCharactersInSet:
并将其作为参数传递[NSCharacterSet whitespaceAndNewlineCharacterSet]
:
NSString *finalValue = [rValue stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]
];