2

由于谷歌文档不再可用,我迷失了这些概念。

什么是节点,什么是元素(继承节点)?

如何从节点切换到元素。我的意思是,例如,如果我写:

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];
}
4

1 回答 1

1

GDataXMLNode 显然是您用于 XML 解析器的类 - GDataXMLNode.h/.m

在您给出的代码中返回一个数组。您可以使用。

NSArray *myArray = [XMLDoc nodesForXPath:@"//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'
于 2012-03-06T02:31:03.430 回答