在iPhone中读取XML

aec*_*tci 0 xml iphone xml-parsing

我有一个XML文件,如下所示:

<Statistics>
     <City ID="01">
          <Town ID="04">
               <Person ID="03" Name="Jack">
               </Person>
               <Person ID="04" Name="John">
               </Person>
               <Person ID="05" Name="Peter">
               </Person>
               <Person ID="06" Name="Daniel">
               </Person>
          </Town>
          <Town>
          ...
          </Town>
     </City>
     <City>
     ...
     </City>
</Statistics>
Run Code Online (Sandbox Code Playgroud)

我想阅读这个XML文件并创建一个城市数组.在城市阵列内部我希望城镇阵列具有给定的ID和城镇阵列内部我希望有一个人员列表,我将在我的项目中使用他们的名字.系统将如下:返回居住在城市中ID =".."的人和ID ="..."的城镇例如:返回居住在CityID ="01"且TownID ="04"的人名单将是[杰克,约翰,彼得,丹尼尔].

有没有在iPhone SDK中这样做的方法?如果有,你可以建议我这样做的方法或解释如何以最简单的方式做到这一点,因为我对这个环境很新.

非常感谢您收到的答案.

Ahm*_*ali 10

的NSXMLParser是你在找什么:的NSXMLParser类参考

这是一个很好的教程:让NSXMLParser成为你的朋友


示例代码:

 NSString* XMLString = @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>...";

 NSData* data = [XMLString dataUsingEncoding:NSUTF8StringEncoding]; 

 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]

 [parser setDelegate:self]; 
 [parser setShouldProcessNamespaces:NO]; 
 [parser setShouldReportNamespacePrefixes:NO];
 [parser setShouldResolveExternalEntities:NO]; 

 [parser parse]; 
Run Code Online (Sandbox Code Playgroud)

你将需要这个代表:

 parser:didStartElement:namespaceURI:qualifiedName:attributes:
Run Code Online (Sandbox Code Playgroud)

并使用attribute类型的变量NSDictionary来读取标记属性:

 [[attributeDict objectForKey:@"id"] integerValue]
 [attributeDict objectForKey:@"Name"]
Run Code Online (Sandbox Code Playgroud)

不要忘记将NSXMLParserDelegate协议添加到您的班级:

#import <Foundation/Foundation.h>

@interface MyClass : NSObject <NSXMLParserDelegate> {
...
Run Code Online (Sandbox Code Playgroud)