解析NSXML Parser Cocoa

时间:2012-12-30 21:31:11

标签: objective-c xml cocoa nsxmlparser

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

等。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

NSXMLParser是那些在纸上听起来不错的类,但是当你真正开始使用它时会让你疯狂。如果你真的想继续这条无趣的道路,那就实现解析器:didStartElement:然后祈祷解析器:foundCharacters:交付货物。 根据我的经验,NSXMLParser就像一个大蹒跚学步的孩子,捣乱拼图,然后逐一递给你。起初看起来好像很棒:“哦,看,我有一块!还有一块!还有一块!”但很快你就会感到困惑:“哦,看,我有5.0!现在,是旋转还是y坐标?”谁知道?不是NSXMLParser,这是肯定的。

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

if([currentElement isEqualToString:@"x"]){
    NSDecimalNumber *dec = [NSDecimalNumber numberWithString:string];
    CGFloat x = dec.floatValue;
}