Ios 用objective-C代码解析XML

Ios 用objective-C代码解析XML,ios,objective-c,xml,xcode,xml-parsing,Ios,Objective C,Xml,Xcode,Xml Parsing,我只想解析从Post响应接收到的字符串,我知道有像NSXMLParse这样的lib/类,apple提供了一些示例,但不是我想要的,或者我还没有准备好理解这些代码 我收到这个: <object> <id>1</id> <alias>juan</alias> <email>jps@sol.pro</email> </object> <object> <id>2</id>

我只想解析从Post响应接收到的字符串,我知道有像NSXMLParse这样的lib/类,apple提供了一些示例,但不是我想要的,或者我还没有准备好理解这些代码

我收到这个:

<object>
<id>1</id>
<alias>juan</alias>
<email>jps@sol.pro</email>
</object>
<object>
<id>2</id>
<alias>juana</alias>
<email>jpsa@sol.pro</email>
</object>

1.
胡安
jps@sol.pro
2.
胡安娜
jpsa@sol.pro
然后我需要解析,并获得如下数据:

NSString *xmlThing = [response];
for xmlThing in-all <object>
{
    uint id = <id>1</id>
    NSString *alias = <alias>juan</alias>
    NSString *email = <email>email@email.com</email>
}
NSString*xmlThing=[response];
总而言之
{
uint id=1
NSString*别名=juan
NSString*电子邮件=email@email.com
}
为什么会这样?因为我认为这是处理和解析所有类型的html、xml等的最简单方法。。。档案

非常感谢您的帮助。

您可以使用及其委托方法

例如: 在*.h文件中添加NSXMLDelegate:

@interface YourClass: NSObject <NSXMLParserDelegate>
@接口YourClass:NSObject
*.m文件:

    @interface YourClass()
    @property NSMutableString *currentXMLValue;
    @property NSMutableArray *objects;
    @end

    @implementation YourClass{
    -(void) processXML {
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData: data];
    self.objects = [[NSMutableArray alloc] init];
    [xmlParser setDelegate: self];
    [xmlParser parse];
    }

    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
        //each time part of string is found append it to current string
        [self.currentXMLValue appendString:string];
    }

//here you can check when <object> appears in xml and create this object
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName
   attributes: (NSDictionary *)attributeDict
{
    //each time new element is found reset string
    self.currentXMLValue = [[NSMutableString alloc] init];
    if( [elementName isEqualToString:@"object"])
    {
        self.obj= [[YourObject alloc] init];
    }
}
//this is triggered when there is closing tag </object>, </alias> and so on. Use it to set object's properties. If you get </object> - add object to array.
    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
    {

        if ([elementName isEqualToString:@"id"]) {
           obj.id = [self.currentXMLValue intValue];
        }
        else if ([elementName isEqualToString:@"alias"]) {
           obj.alias = self.currentXMLValue;
        }
        else if ([elementName isEqualToString:@"object"]) {
        if (self.objects) {
            [self.object addObject:obj];
        }
        }
    //and so on
    } 
    }
@interface YourClass()
@属性NSMutableString*currentXMLValue;
@属性NSMutableArray*对象;
@结束
@类的实现{
-(void)processXML{
NSXMLParser*xmlParser=[[NSXMLParser alloc]initWithData:data];
self.objects=[[NSMutableArray alloc]init];
[xmlParser setDelegate:self];
[xmlParser parse];
}
-(void)解析器:(NSXMLParser*)解析器查找字符:(NSString*)字符串
{
//每次找到字符串的一部分时,都将其附加到当前字符串
[self.currentXMLValue appendString:string];
}
//在这里,您可以检查何时显示在xml中并创建此对象
-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName
属性:(NSDictionary*)属性指令
{
//每次找到新元素时,重置字符串
self.currentXMLValue=[[NSMutableString alloc]init];
if([elementName IsequalString:@“object”])
{
self.obj=[[YourObject alloc]init];
}
}
//当有结束标记时会触发此操作,依此类推。使用它设置对象的属性。如果获得-将对象添加到数组。
-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName
{
if([elementName IsequalString:@“id”]){
obj.id=[self.currentXMLValue intValue];
}
else if([elementName IsequalString:@“alias”]){
obj.alias=self.currentXMLValue;
}
else if([elementName IsequalString:@“object”]){
if(self.objects){
[self.object addObject:obj];
}
}
//等等
} 
}

上述答案似乎很完美,但我建议您使用其他解析器如果您有大量数据和更快的处理速度,您可能可以使用TBXML,xml比较

您可以使用XMLReader类轻松解析xml文件。
要了解更多详细信息,签出

NSXMLParser
似乎是您的示例的正确选择。你对它的哪一部分很难理解?实际上我不理解课堂参考
https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html
我应该使用哪种方法来知道xml文件中有多少个?我需要知道如何循环所有这些,然后如何告诉从标签返回值?
NSXMLParser
使用一种称为委派的模式。关于授权,请参见。它在所有iOS/Foundation/UIKit API中都被广泛使用。下面的答案是直截了当的,应该直接回答你的问题。谢谢你,我忘了!它应该是一个包含您的id、别名、电子邮件的对象。@Monolo,谢谢。我已经用你的建议更新了我的答案。