2014-01-11 73 views
0

我試圖解析以下XML文件:試圖解析XML

enter image description here

然而,當我分析它:

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    currentElementName = elementName; 
} 
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if ([currentElementName isEqualToString:@"link"]) { 
     NSLog(@"Link: %@",string); 
    } 
} 

我得到以下的NSLog:

Link: http://www.flickr.com/photos/[email protected]/ 
Link: 

Link: http://www.flickr.com/photos/[email protected]/ 
Link: 

Link: 


Link: http://www.flickr.com/photos/[email protected]/11865861164/ 
Link: 

正如您所看到的我想要的網址沒有出現,並且有一堆空的網址。

爲什麼?

謝謝!

編輯:

我試圖藝術Fistman的答案,但我得到的是:

link is (null)

+0

如果不發佈相關代碼,您不能期待太多的幫助。 – rmaddy

+0

@rmaddy我編輯了我的答案 –

+0

爲什麼你在'foundCharacters'方法中記錄鏈接?你想要的URL是你可以在'didStartElement:'方法中訪問的'link'元素的'href'屬性的值。 – rmaddy

回答

2

嘗試didStartElement回調。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict; 

elementName@"link"您的網址應該是attributeDict[@"href"]

例如

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { 
     if([elementName isEqualToString:@"link"]) { 
      NSLog(@"link is %@\n", attributeDict[@"href"]); 
     } 
    } 
+0

現在我得到:'link is(null)' –

+0

屬性字典裏有什麼? –

+0

看起來屬性字典中沒有鍵 –

0

你會發現在didStartElement中啓動元素,所以在那裏改變狀態。當你找到字符時,檢查你是否處於正確的狀態,然後這些字符就是你想要的。

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    // assume currentElementName starts out nil. if we find "generator", enter 
    // "generator" state. if we're in "generator" state and find "link" then enter 
    // "link" state, which is our target state 

    if ([currentElementName isEqualToString:@"generator"] && [elementName isEqualToString:@"link"]) 
     currentElementName = @"link"; 

     // now we're in the tag we want to be in. get attributes from 
     // the attributeDict, if you need the tag body, check for "link" state in foundChars 

     NSLog(@"here are the attributes we want %@", attributeDict); 

    else if ([elementName isEqualToString:@"generator"]) { 
     currentElementName = @"generator"; 
    } 
} 
+0

「foundCharacters」方法完全不需要解決OP的問題。您可以訪問'didStartElement:'方法中的'href'屬性。 – rmaddy

+0

是的,我現在看到了。該xml打印很小。試圖解決未在其他答案中涉及的州管理 – danh

+0

沒有可管理的狀態。另一個答案是正確的。 – rmaddy