由于谷歌文档不再可用,我对这些概念感到失望。
什么是节点,什么是元素(继承节点)?
如何从节点切换到元素。我的意思是,例如,如果我写:
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];
}
答案 0 :(得分: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'