2013-07-20 4 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, не полагаясь на другую библиотеку. Thanx. – Malloc

ответ

0

Вы должны отслеживать, является ли синтаксический анализатор в настоящее время «внутри» элементом entry или нет. Например, вы можете добавить целочисленное свойство entryLevel к классу, установить его сначала к нулю и обновлять его в didStartElement и didEndElement:

- (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

 Смежные вопросы

  • Нет связанных вопросов^_^