gpt4 book ai didi

ios - iOS 中的 XML 解析问题

转载 作者:行者123 更新时间:2023-11-29 03:28:10 34 4
gpt4 key购买 nike

我一直在尝试解析下面的 XML,但没有成功。这是 XML 数据:-

 <latitude>51.50998000</latitude> <longitude>-0.13370000</longitude>

我将此数据转换为NSData,然后解析它。这是 NSData 形式的样子:-

presence converted to NSData :- <3c6c6174 69747564 653e3531 2e353039 39383030 303c2f6c 61746974 7564653e 203c6c6f 6e676974 7564653e 2d302e31 33333730 3030303c 2f6c6f6e 67697475 64653e>

这就是我实际解析数据的方式:-

 -(LocationParser *)initXMLParser:(NSData *)dataWithlocation
{
self=[super init];
if (self){
self.receivedData = dataWithlocation;
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:self.receivedData];
[parser setDelegate:self];
BOOL success=[parser parse];
if (success) {
NSLog(@"Successful Parsing");

}
else{
NSLog(@"Error while parsing");
}
}
return self;
}

-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"latitude"])
{
_location = [[Location alloc]init];

//Extract the attribute here
_location.latitude =[[attributeDict objectForKey:@"latitude"]stringValue];
NSLog(@"latitude is :- %@", _location.latitude); // this shows latitude is :- (null)
_location.longitude = [[attributeDict objectForKey:@"longitude"]stringValue];
NSLog(@"longitude is :- %@", _location.longitude); // this shows longitude is :- (null)

}
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if(!_curElem)
_curElem = [[NSMutableString alloc] initWithString:string];
else
[_curElem appendString:string];

NSLog(@"Processing Value: %@", _curElem); //This shows Processing Value: 51.50998000

}


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"latitude"])
{
return;

}
else
{
[_location setValue:_curElem forKey:elementName];

_curElem = nil;
}
}

最佳答案

属性是左括号和右括号之间的内容。

<longitude attribute="more info">8.19283</longitude>

您不会在 attributeDict 中找到实际值.解析 parser:foundCharacters: 中的经纬度值

编辑: 由于纬度在 XML 中排在第一位,因此也首先对其进行解析。要确定一个值是否为初始值,您应该使用一些无效值在您的位置类中初始化您的位置。

编辑 2:确保您拥有有效的 XML。 NSXMLParser 期望一个!包围中间一切的元素。它认为您的 XML 文件在 </latitude> 之后结束了.

<location>
<latitude>50.0984321</latitude>
<longitude>-0.13370000</longitude>
</location>

这是我现在实现和测试的源代码

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"latitude"]) {
self.location = [[Location alloc] init];
}
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (self.location.isLatitudeInitial) {
self.location.latitude = string.doubleValue;
} else {
self.location.longitude = string.doubleValue;
}
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"longitude"]) {
NSLog(@"%@", self.location);
}
}

在位置类中

#define INITIAL 9999.0

@implementation Location

- (id)init {
self = [super init];
if (self) {
self.latitude = INITIAL;
self.longitude = INITIAL;
}
return self;
}

- (BOOL)isLatitudeInitial {
return self.latitude == INITIAL;
}

- (NSString *)description {
return [NSString stringWithFormat:@"Latitude: %f, longitude: %f", self.latitude, self.longitude];
}

@end

完美运行

关于ios - iOS 中的 XML 解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20185521/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com