Getting a Value from NSXMLDocument
I'm using an API to upload an image and I need to get the uploaded image URL (image_link) from the XML output shown below
<?xml version="1.0" encoding="iso-8859-1"?><imginfo xmlns="http://ns.imageshack.us/imginfo/7/" version="7" timestamp="1283286280">
<rating>
<ratings>0</ratings>
<avg>0.0</avg>
</rating>
<files server="834" bucket="1378">
<image size="515455" content-type="image/jpeg">maidsamaep20scr1.jpg</image>
<thumb size="8822" content-type="image/jpeg">maidsamaep20scr1.th.jpg</thumb>
</files>
<resolution>
<width>1280</width>
<height>720</height>
</resolution>
<class>r</class>
<visibility>no</visibility>
<uploader>
<ip>69.125.188.189</ip>
</uploader>
<links>
<image_link>http://img834.imageshack.us/img834/1378/maidsamaep20scr1.jpg</image_link>
<image_h开发者_如何转开发tml><a href="http://img834.imageshack.us/my.php?image=maidsamaep20scr1.jpg" target="_blank"><img src="http://img834.imageshack.us/img834/1378/maidsamaep20scr1.jpg" alt="Free Image Hosting at www.ImageShack.us" border="0"/></a></image_html>
<image_bb>[URL=http://img834.imageshack.us/my.php?image=maidsamaep20scr1.jpg][IMG]http://img834.imageshack.us/img834/1378/maidsamaep20scr1.jpg[/IMG][/URL]</image_bb>
<image_bb2>[url=http://img834.imageshack.us/my.php?image=maidsamaep20scr1.jpg][img=http://img834.imageshack.us/img834/1378/maidsamaep20scr1.jpg][/url]</image_bb2>
<thumb_link>http://img834.imageshack.us/img834/1378/maidsamaep20scr1.th.jpg</thumb_link>
<thumb_html><a href="http://img834.imageshack.us/my.php?image=maidsamaep20scr1.jpg" target="_blank"><img src="http://img834.imageshack.us/img834/1378/maidsamaep20scr1.th.jpg" alt="Free Image Hosting at www.ImageShack.us" border="0"/></a></thumb_html>
<thumb_bb>[URL=http://img834.imageshack.us/my.php?image=maidsamaep20scr1.jpg][IMG]http://img834.imageshack.us/img834/1378/maidsamaep20scr1.th.jpg[/IMG][/URL]</thumb_bb>
<thumb_bb2>[url=http://img834.imageshack.us/my.php?image=maidsamaep20scr1.jpg][img=http://img834.imageshack.us/img834/1378/maidsamaep20scr1.th.jpg][/url]</thumb_bb2>
<yfrog_link>http://yfrog.com/n6maidsamaep20scr1j</yfrog_link>
<yfrog_thumb>http://yfrog.com/n6maidsamaep20scr1j.th.jpg</yfrog_thumb>
<ad_link>http://img834.imageshack.us/my.php?image=maidsamaep20scr1.jpg</ad_link>
<done_page>http://img834.imageshack.us/content.php?page=done&l=img834/1378/maidsamaep20scr1.jpg</done_page>
</links>
This is what I currently have. I got the file to upload and I took the data from the response to an NSXMLDocument. The only problem is getting the image_link from the NSXMLDocument.
-(void)openPanelDidEnd:(NSOpenPanel *)openPanel
returnCode:(int)returnCode
contextInfo:(void *)x
{
// Did they chosose "Open"
if (returnCode == NSOKButton) {
// Start Upload
NSLog(@"%@",[openPanel filename]);
//Set Imageshack Upload API URL
NSURL *url = [NSURL URLWithString:@"http://www.imageshack.us/upload_api.php"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
//Set API Key
[request setPostValue:@"" forKey:@"key"];
//Set File
[request setFile:[openPanel filename] forKey:@"fileupload"];
//Set Progress
[request setDownloadProgressDelegate:APIProgress];
[request startSynchronous];
// Show API Output
NSString *response = [request responseString];
NSLog(@"%@",response);
int httpcode = [request responseStatusCode];
if (httpcode == 200) {
// Perform XML Phasing
NSError * error;
NSArray *itemNodes;
// Convert Response Data from NSString to NSData
NSData *data = [response dataUsingEncoding:NSUTF8StringEncoding];
NSXMLDocument *doc = [[NSXMLDocument alloc] initWithData:data
options:0
error:&error];
NSMutableArray* imglinks = [[NSMutableArray alloc] initWithCapacity:13];
NSLog(@"%@", doc);
// XPath to get image_link value only
itemNodes = [doc nodesForXPath:@"//links/image_link" error:&error];
for(NSXMLElement* xmlElement in itemNodes)
[imglinks addObject:[xmlElement stringValue]];
NSLog(@"%@",[[imglinks objectAtIndex:0]stringValue]);
// Insert Image URL to Message
[fieldmessage setString:[NSString stringWithFormat:@"#image %@ \\n\\n %@",[[imglinks objectAtIndex:0]stringValue],[fieldmessage string]]];
// Release unneeded items from memory
[itemNodes release];
[doc release];
[data release];
}
else {
// Upload Failed, show error message
[self showsheetmessage:@"MelScrobbleX was unable to upload the image you selected" explaination:[NSString stringWithFormat:@"Error: i \\n \\n %@", httpcode, response]];
}
}
}
The problem is that it doesn't seem to show the string value from the NSMutableArray. It gives me this error:
2010-08-31 16:22:13.496 MelScrobbleX[45835:a0f] -[NSCFString stringValue]: unrecognized selector sent to instance 0x12ada80
2010-08-31 16:22:14.026 MelScrobbleX[45835:a0f] -[NSCFString stringValue]: unrecognized selector sent to instance 0x12ada80
What is the correct way in retrieving the image_link value from NSMutableArray?
In this line
for(NSXMLElement* xmlElement in itemNodes)
[imglinks addObject:[xmlElement stringValue]];
You already took stringValue
of the xmlElement
before putting it into the array imglinks
. So, in this line
NSLog(@"%@",[[imglinks objectAtIndex:0]stringValue]);
stringValue
is unnecessary... you shouldn't ask a string to give a string value, it's already a string! Just do
NSLog(@"%@",[imglinks objectAtIndex:0]);
精彩评论