1

我试图通过解析通过网络服务返回的 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(反斜杠) 而不是 values(BusinessName)?,我在浏览器中检查了 web 服务,值返回正确。总共有 17 个元素返回,您可以在日志中看到一些没有双引号的字符串。这不是问题。但是,为什么会出现这样的情况。如何获得正确的值而不是反斜杠。

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

1 回答 1

4

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

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

而不是分配 strinrValue,您应该附加它。目前,实际值(例如@"BusinessName")被识别和分配,但随后@"\n\n\n"连续字符串出现在同一个标​​签内,并在首先找到的值之上分配。

制作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]
];
于 2013-10-31T09:49:49.990 回答