我正在使用API,我得到了这个回复,我想从中解析整数ID:
<?xml version="1.0"?>
<trip>328925</trip>
你会如何解析这个?我有一些我想要摆脱的非常脆弱的代码,我很欣赏一些建议:
if ([[response substringWithRange:NSMakeRange(0, 21)]
isEqualToString: @"<?xml version=\"1.0\"?>"]) {
self.tripId = [response substringWithRange:NSMakeRange(28, response.length-35)];
}
我不认为我需要一个XML解析库来完成这项任务!
答案 0 :(得分:4)
我会使用XML解析器。使用XML解析器确实是解析XML的最佳方法。
要做到这一点并不难:
// Parser Delegate
@interface ParserDelegate : NSObject {
int inTripElements;
NSMutableString* trip;
}
@property (readonly) NSMutableString* trip;
@end
@implementation ParserDelegate
@synthesize trip;
- (id) init {
if (![super init]) {
[self release];
return nil;
}
trip = [@"" mutableCopy];
return self;
}
- (void) parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"trip"]) {
++inTripElements;
}
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (inTripElements > 0) {
[trip appendString:string];
}
}
- (void) parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"trip"]) {
--inTripElements;
}
}
@end
// Parsing
NSString* toParse = @"<?xml version=\"1.0\"?>"
"<trip>328925</trip>";
NSData* data = [NSData dataWithBytes:[toParse UTF8String]
length:strlen([toParse UTF8String])];
ParserDelegate* parserDelegate = [[ParserDelegate alloc] init];
NSXMLParser* parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:parserDelegate];
[parser parse];
[parser release];
NSLog(@"trip=%@", parserDelegate.trip);
[parserDelegate release];
答案 1 :(得分:0)
如果您真的不想使用XML Parser创建正确的对象,为什么不使用正则表达式<trip>\d*</trip>
来匹配元素?然后,您可以通过删除开始和结束标记以及解析来获取整数部分,以确保与任何字符串一样正确。
这是一个用于测试正则表达式的便利位置; http://regexlib.com/RETester.aspx
答案 2 :(得分:-1)
查看'NSScanner'。这将是完美的。
答案 3 :(得分:-2)
您应该使用XML库,因为在许多情况下代码会发生变化
例如,在这种情况下会发生什么
未发送<?xml
声明或编码从UTF-8更改
或者somone在trip元素之前添加一个空格
在所有这些情况下,文件的提供者都可以说文件是正确的
等
使用XML解析完成所有这些并且您的代码更加健壮
同样在这种情况下,解析和查找的代码非常简单。