Разбор элементов с одинаковыми именами, но с разными атрибутами

#iphone #objective-c #ios #cocoa

#iPhone #objective-c #iOS #какао

Вопрос:

Я новичок в разработке iPhone, и этот вопрос может быть простым, но я не знаю ответа на него.

Проблема: у меня есть этот XML-код:

 <im:image height="53">
     picture52x52.jpg
</im:image>

<im:image height="75">
     picture75x75.jpg
</im:image>

<im:image height="100">
     picture100x100.jpg
</im:image>
  

Мне нужно разобрать только второй элемент (второй элемент, второе изображение), но я не знаю как. Я всегда разбираю три элемента, но мне нужен только один.

Ответ №1:

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict  
{ 
        NSString *imageSize = [NSString stringWithString:[attributeDict valueForKey:@"height"]];
        if([imageSize isEqualToString:@"75"])
         { 
            // parse something like this
         }
}
  

Ответ №2:

Вы должны использовать эти два метода разумно :

 parser:foundCharacters:
parser:didEndElement:namespaceURI:qualifiedName:
  

Пожалуйста, обратитесь к этой ссылке — Обработка XML-элементов и атрибутов

Ответ №3:

Позвольте мне предложить вам еще одно решение: вы можете вложить имя изображения в CDATA, т.Е. генерировать xml следующим образом —

 <im:image height="53">
    <![CDATA[picture52x52.jpg]]>
</im:image>

<im:image height="75">
     <![CDATA[picture75x75.jpg]]>
</im:image>

<im:image height="100">
     <![CDATA[picture100x100.jpg]]>
</im:image>
  

И просто используйте этот метод делегирования:

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock

если это единственный элемент, заключенный в блок CDATA.

Надеюсь, вы поняли 😉