我正在尝试从Cocoa中解析xml中的以下信息。
<level>
<entity>
<name>red</name>
<id>0</id>
<body>false</body>
<x>0.0</x>
<y>0.0</y>
<rotation>0.0</rotation>
</entity>
这是我到目前为止遵循apple。的nsxml解析器指南。
NSString* currentElement;
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
currentElement = elementName;
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if([currentElement isEqualToString:@"name"]){
NSLog(@"Name found: %@", string);
}
}
在我找到的字符方法中,它记录了语句,但唯一返回的是“Name found:”,其余的是空白。
我是否正确地执行此操作以在我的xml中获取以下标记?我想提取每个标签。
例如:
NSString* name = THE_NAME;
int x = [THE_X_VALUE, intValue];
等。
有人可以帮帮我吗?
答案 0 :(得分:0)
NSXMLParser是那些在纸上听起来不错的类,但是当你真正开始使用它时会让你疯狂。如果你真的想继续这条无趣的道路,那就实现解析器:didStartElement:然后祈祷解析器:foundCharacters:交付货物。 根据我的经验,NSXMLParser就像一个大蹒跚学步的孩子,捣乱拼图,然后逐一递给你。起初看起来好像很棒:“哦,看,我有一块!还有一块!还有一块!”但很快你就会感到困惑:“哦,看,我有5.0!现在,是旋转还是y坐标?”谁知道?不是NSXMLParser,这是肯定的。
至于最后一行代码:提取字符串的数值,NSDecimalNumber非常方便。
if([currentElement isEqualToString:@"x"]){
NSDecimalNumber *dec = [NSDecimalNumber numberWithString:string];
CGFloat x = dec.floatValue;
}