使用GDataXML获取XML响应值

时间:2012-01-05 11:26:40

标签: ios xml xml-parsing response gdata-api

在HTTP Post之后

我检索xml响应,如下所示:

<result value="OK">
    <user id="1">
            <name>admin</name>
            <rank>0</rank>
            <picture_count>0</picture_count>
            <comment_count>0</comment_count>
            <has_profile>1</has_profile>
    </user>
</result>

我想提取用户ID,但我不知道如何做到这一点。 我尝试使用GDataXML Parser,因为它已经集成在我的项目中,但是 我不知道如何在html标签中获取值。

我希望你能帮助我。如果没有XMLParser的解决方案,您会推荐正则表达式吗?在这种情况下,我会很感激正则表达式的解决方案,我不是很擅长这个:)

提前致谢。

1 个答案:

答案 0 :(得分:4)

这是我用来检索用户属性的代码。它有效。

NSString* path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];

NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:path];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData 
                                                           options:0 error:&error];

NSArray *userElements = [doc.rootElement elementsForName:@"user"];

for (GDataXMLElement *userEl in userElements) {

    // Attribute
    NSString *attribute = [(GDataXMLElement *) [userEl attributeForName:@"id"] stringValue];        
    NSLog(@"attribute for user is %@", attribute);

    // Name
    NSArray *names = [userEl elementsForName:@"name"];
    if (names.count > 0) {
        GDataXMLElement *name = (GDataXMLElement *) [names objectAtIndex:0];

        NSLog(@"name for user is %@", name.stringValue);
    }

    // Rank
    NSArray *ranks = [userEl elementsForName:@"rank"];
    if (ranks.count > 0) {
        GDataXMLElement *rank = (GDataXMLElement *) [ranks objectAtIndex:0];

        NSLog(@"rank for user is %@", rank.stringValue);
    }

    // Do the same for other tags...     
}

[doc release];
[xmlData release];

文件test.xml与从xml响应中检索的文件相同。因此,您需要更改此代码段的第二行。也许您可以调用initWithData类的NSData方法。

您可以将此代码放在所需的位置。也许你可以创建一个其他类作为集中式解析器。希望它有所帮助

修改

将这两行放在前面进行说明。

NSString *valAttribute = [(GDataXMLElement *) [doc.rootElement attributeForName:@"value"] stringValue];        
NSLog(@"value attribute for result is %@", valAttribute);

解释很简单。使用doc.rootElement检索整个xml文档,从<result></result>