2013-07-20 23 views
0

這裏的話,冠軍兩次出現,之前和entry後存在:應該放什麼考試得到嵌套元素

<feed xmlns:im="http://xxx.com/rss" xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> 
    <id>http://xxxxx/xml</id><title>xxxxx: Top articles</title><updated>2013-07-20T04:30:05-07:00</updated><link rel="alternate" type="text/html" href="https://xxxx;popId=1"/><link rel="self" href="http://xxxxxxx/xml"/><icon>http://xxxxxxxxxxx</icon><author><name>xxxxxxx</name><uri>http://www.xxxxx.com/xxxxx/</uri></author><rights>Copyright 2001</rights> 

     <entry> 
      <updated>2013-07-20T04:30:05-07:00</updated> 

       <id im:id="621507457">https://xxxxx.xxxx.com/us/album/blurred-lines-feat.-t.i.-pharrell/id621507456?i=621507457&amp;uo=2</id> 
       //I want to get only the title nested in entry tree 
       <title>Robin Thicke</title> 

didStartElement:協議的方法制成,以外部釋放任何考什麼<entry></entry>

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

    if ([elementName isEqualToString:@"title"]) { 
     //This is not enough, since it bring also the title value which is outside the entry tree 
    } 
} 

我不想依靠像TBXML外部庫,我想知道閹這是純粹的NSXMLParserDelegate可行?

+0

我不會回答你的問題,而是給你「更好」的XML解析器列表:http://www.raywenderlich.com/553/xml-tutorial-for-ios-how-to-choose-the-best-xml-parser-for-your-iphone-project – Peres

+0

我已經閱讀過那篇文章,我需要一種方式來使用純NSXMLParserDelegate而不依賴於其他庫。感謝名單。 – Malloc

回答

0

您必須跟蹤解析器當前是否在entry元素的「內部」。 例如,您可以 整數屬性​​在didStartElementdidEndElement添加到類, 設置它最初爲零 和更新:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementName isEqualToString:@"entry"]) { 
     self.entryLevel++; 
    } else if ([elementName isEqualToString:@"title"] && self.entryLevel > 0) { 
     // title inside entry 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqualToString:@"entry"]) { 
     self.entryLevel--; 
    } 
} 
+0

嗨,我會接受這個解決方案,只要我覺得沒有其他方法來測試嵌套關卡。 – Malloc