【问题标题】:Get XML response value with GDataXML使用 GDataXML 获取 XML 响应值
【发布时间】:2012-02-03 05:31:08
【问题描述】:

在 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没有解决方案,你会推荐正则表达式吗?在这种情况下,我会很感激正则表达式的解决方案,我不太擅长这个:)

提前致谢。

【问题讨论】:

  • 使用attributeForName 作为用户标签元素。有关更多信息,请参阅stackoverflow link
  • 谢谢,但如果我使用 GDataXMLElement *elem = doc.rootElement; NSString *userID = [[elem attributeForName:@"user id"]stringValue]; 这将返回 null。
  • attributeForName:@"id" 是正确的。该属性是id 而不是user id。希望对您有所帮助。
  • NSString *userID = [[elem attributeForName:@"id"]stringValue]; 仍然为空。我也用@“value”尝试过,这返回OK ...不知道为什么@“id”不起作用。我必须与GDataXMLNode 合作吗?但我不知道怎么做。

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


【解决方案1】:

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

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 响应中检索到的文件相同。因此,您需要更改此 sn-p 代码的第二行。也许你可以调用NSData类的initWithData方法。

您可以将此代码放在您想要的位置。也许您可以创建另一个作为集中式解析器的类。希望对你有帮助

编辑

将这两行放在前面作为说明。

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

解释很简单。使用doc.rootElement,您可以检索从&lt;result&gt;&lt;/result&gt; 的整个xml 文档

【讨论】:

  • 非常感谢。我没有用这些单个用户元素构建这个用户数组。这段代码就像一个魅力。
  • 之后的小问题:我正在尝试获取结果值,构建数组NSArray *resultElements = [doc.rootElement elementsForName:@"result"];,然后像 get 'attributeForName@"value"` 一样,但数组为空。跨度>
  • 好的,@flexaddicted,但是如何提取Array。我在元素中有数组,但我不知道如何提取它。
猜你喜欢
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
相关资源
最近更新 更多