0

我正在尝试从 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>

这是我到目前为止没有遵循苹果的 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);
 }

 }

在我找到的字符方法中,它记录了语句,但唯一返回的是“找到的名称:”,其余为空白。

我这样做是否正确以在我的 xml 中获取以下标签?我想提取每个标签。

例如:

NSString* name = THE_NAME;
int x = [THE_X_VALUE, intValue];

等等

谁能帮帮我?

4

1 回答 1

0

NSXMLParser 是那些在纸上听起来不错的类之一,但当你真正开始使用它时会让你发疯。如果您真的想继续这条无趣的道路,请实现 parser:didStartElement: 然后祈祷 parser:foundCharacters: 交付货物。以我的经验,NSXMLParser 就像一个大小孩,他会打破拼图,然后把碎片一个接一个地交给你。起初这似乎很棒:“哦,看,我有一块!还有一个!还有一个!” 但很快你就会感到困惑:“哦,看,我有 5.0!现在,是旋转还是 y 坐标?” 谁知道?不是 NSXMLParser,这是肯定的。

至于最后一行代码:提取字符串的数值,NSDecimalNumber 非常好用。

if([currentElement isEqualToString:@"x"]){
    NSDecimalNumber *dec = [NSDecimalNumber numberWithString:string];
    CGFloat x = dec.floatValue;
}
于 2016-07-09T10:44:54.000 回答