iPhone - разница между GDataXMLNode и GDataXMLElement, и как их использовать - PullRequest
2 голосов
/ 06 марта 2012

Так как Google Doc больше не доступен, я заблудился с этими понятиями.

Что такое узел и что такое элемент (который наследует узел)?

Как я могу переключаться с узлов на элементы. Я имею в виду, например, если я напишу:

NSError* error;
NSData* xmlData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ForTesting" ofType:@"xml"]];

error = nil;
GDataXMLDocument* XMLDoc = [[[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error] autorelease];
if (XMLDoc == nil) {
    NSLog(@"%@", error.description);
    return;
}

GDataXMLNode* xmlElement = [[XMLDoc nodesForXPath:@"//root/fileVersion" error:nil] objectAtIndex:0];
NSString* fileVersion = xmlElement.stringValue;

GDataXMLNode* xmlList = [[XMLDoc nodesForXPath:@"//root/list" error:nil] objectAtIndex:0];  // single item

После этого кода, как я могу написать что-то подобное для переключения на GDataXMLElement вместо продолжения с GDataXMLNode, что потребует от меня продолжения использования XPath (я не хочу использовать его после этой точки):

// code don't work : elementsForName is not defined for GDataXMLNode
for (GDataXMLElement* xmlObject in [xmlList elementsForName:@"object"]) {
    MyClass* obj = [[[MyClass alloc] initWithXMLElement:xmlObject] autorelease];
}

1 Ответ

1 голос
/ 06 марта 2012

GDataXMLNode - это, очевидно, классы, которые вы используете для анализатора XML - GDataXMLNode.h / .m

В указанном вами коде возвращается массив. Вы можете использовать.

NSArray * myArray = [XMLDoc nodeForForPP: @ "// root / fileVersion" error: nil];

Вы можете перебирать myArray следующим образом.

for (GDataXMLElement *nodeXmlElt in myArray)
{
    //some code
}

Каждый мой nodeXmlElt будет таким, как приведено ниже.

<fileVersion>
<title>San Francisco CBS News</title>
<link>http://news.google.com/news/</link>
<fileVersion>

//getting title
NSArray *elementArray = [nodeXmlElt elementsForName:@"title"];
GDataXMLElement *gdataElement = (GDataXMLElement *)[elementArray objectAtIndex:0];
NSString *title = gdataElement.stringValue; //returns 'San Francisco CBS News'
...