在从 XML 服务获取值时出现而不是字符串



我试图通过解析通过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]
];

最新更新