Пусть структура XML, такие как в примере и тег не имеет дочерних элементов и текст внутри тега не имеют Юникода или другие специальные символы. Тогда для вывода на консоль (например) «название» значение книги с идентификатором «bk101» Вы должны:
Declare codeValue
в собственность.
@property (strong, nonatomic) NSString *codeValue;
Измените код, как показано ниже:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"book"])
{
_codeValue = [attributeDict objectForKey:@"id"];
}
}
Добавить реализацию foundCharacters:
метод, как показано ниже:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ([_codeValue isEqualToString:@"bk101"])
{
NSLog(@"found: %@", string); // output book title here
}
}
Добавить реализацию didEndElement:
метод, как показано ниже (выборочно для случая, когда не все теги «book» будут иметь атрибут):
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (_codeValue != nil)
{
_codeValue = nil
}
}
ПРИМЕЧАНИЕ: Если условия, указанные в начале поста будет отличаться - вам может понадобиться другой реализации.
качестве альтернативы вы можете использовать XMLConverter и конвертировать XML (я сделал некоторые изменения):
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="bk101">
<title>XML Developer's Guide</title>
</book>
<book id="bk102">
<title>Midnight Rain</title>
</book>
</books>
NSDictionary
к, как показано ниже:
2013-12-24 13:15:48.167 test[603:70b] {
books = {
book = (
{
"-id" = bk101;
title = "XML Developer's Guide";
},
{
"-id" = bk102;
title = "Midnight Rain";
}
);
};
}
и работать с ним.
Не могли бы вы напечатать атрибутDict? – Nirav