从NSXMLDocument获取值

时间:2010-08-31 20:36:07

标签: xml cocoa nsarray

我正在使用API​​上传图片,我需要从下面显示的XML输出中获取上传的图片网址(image_link)

<?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_html>&lt;a href=&quot;http://img834.imageshack.us/my.php?image=maidsamaep20scr1.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://img834.imageshack.us/img834/1378/maidsamaep20scr1.jpg&quot; alt=&quot;Free Image Hosting at www.ImageShack.us&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;</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>&lt;a href=&quot;http://img834.imageshack.us/my.php?image=maidsamaep20scr1.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://img834.imageshack.us/img834/1378/maidsamaep20scr1.th.jpg&quot; alt=&quot;Free Image Hosting at www.ImageShack.us&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;</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&amp;l=img834/1378/maidsamaep20scr1.jpg</done_page>
  </links>

这就是我现在拥有的。我得到了要上传的文件,并将响应中的数据从NSXMLDocument中获取。唯一的问题是从NSXMLDocument获取image_link。

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

问题是它似乎没有显示来自NSMutableArray的字符串值。它给了我这个错误:

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

从NSMutableArray中检索image_link值的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

在这一行

 for(NSXMLElement* xmlElement in itemNodes)
            [imglinks addObject:[xmlElement stringValue]];

在将stringValue放入数组xmlElement之前,您已经imglinks。所以,在这一行

 NSLog(@"%@",[[imglinks objectAtIndex:0]stringValue]);

stringValue是不必要的......你不应该要求字符串给出一个字符串值,它已经是一个字符串了!只是做

 NSLog(@"%@",[imglinks objectAtIndex:0]);