Получить значение XML-ответа с помощью GDataXML - PullRequest
2 голосов
/ 05 января 2012

после HTTP-сообщения Я получаю 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>

Я хотел бы извлечь идентификатор пользователя, но я не знаю, как это сделать.Я попробовал с GDataXML Parser, потому что это уже интегрировано в мой проект, но я не знаю, как получить значение внутри HTML-тега.

Надеюсь, вы мне поможете.Если нет решения с XMLParser, вы бы порекомендовали регулярные выражения?В этом случае я был бы признателен за решение для выражения регулярного выражения, я не очень хорош в этом:)

Заранее спасибо.

1 Ответ

4 голосов
/ 06 января 2012

Это код, который я использую для получения атрибута пользователя. Это работает.

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.

Вы можете разместить этот код там, где хотите. Может быть, вы можете создать другой класс, который работает как централизованный парсер. Надеюсь, это поможет

EDIT

Поставьте эти две строки перед инструкциями.

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

Объяснение довольно простое. С doc.rootElement вы получаете весь XML-документ, от <result> до </result>

...