Хорошо, ваш первый шаг - создать класс, который будет анализировать данные. Назовите это RecordParser
, например. Теперь нам нужно добавить пару методов в заголовок, а также NSMutableArray
.
@interface RecordParser : NSObject {
NSMutableArray *records;
}
@property(nonatomic,retain)NSMutableArray *records;
-(void)loadRecords:(NSString *)records;
-(void)traverseElement:(TBXMLElement *)element;
@end
Теперь продолжайте и начните внедрять. Теперь нам нужно реализовать эти два метода, чтобы делать то, что мы хотим, чтобы они делали.
- (void)loadRecords:(NSString *)records {
NSString *someXML = @"http://www.something.com/somexml.xml";
TBXML *tbxml = [[TBXML tbxmlWithURL:[NSURL URLWithString:someXML]] retain];
records = [NSMutableArray array];
[records retain];
if (tbxml.rootXMLElement)
[self traverseElement:tbxml.rootXMLElement];
[tbxml release];
}
По сути, этот метод захватит соответствующий XML-файл и начнет процесс синтаксического анализа. Кроме того, вы инициализируете свой массив и сохраняете его. Теперь мы подходим к сыру.
- (void) traverseElement:(TBXMLElement *)element {
do {
if (element->firstChild)
[self traverseElement:element->firstChild];
if ([[TBXML elementName:element] isEqualToString:@"Record"]) {
TBXMLElement *destination = [TBXML childElementNamed:@"Destination" parentElement:element];
TBXMLElement *status = [TBXML childElementNamed:@"Status" parentElement:element];
TBXMLElement *guid = [TBXML childElementNamed:@"GUID" parentElement:element];
TBXMLElement *dateSub = [TBXML childElementNamed:@"DateSubmitted" parentElement:element];
TBXMLElement *dateToSend = [TBXML childElementNamed:@"DateToSend" parentElement:element];
TBXMLElement *dateSent = [TBXML childElementNamed:@"DateSent" parentElement:element];
TBXMLElement *dateReceived = [TBXML childElementNamed:@"DateReceived" parentElement:element];
TBXMLElement *message = [TBXML childElementNamed:@"Message" parentElement:element];
TBXMLElement *id = [TBXML childElementNamed:@"ID" parentElement:element];
[records addObject:[NSArray arrayWithObjects:
[TBXML textForElement:destination],
[TBXML textForElement:status],
[TBXML textForElement:guid],
[TBXML textForElement:dateSub],
[TBXML textForElement:dateToSend],
[TBXML textForElement:dateSent],
[TBXML textForElement:dateReceived],
[TBXML textForElement:message],
[TBXML textForElement:id],nil]];
}
} while ((element = element->nextSibling));
}
По сути, метод выполняет поиск по XML-файлу в поисках элемента с именем, которое вы ищете, а затем захватывает данные из дочерних узлов. Кроме того, данные добавляются в массив records
. Таким образом, в основном, когда это сделано, в массиве records
должны быть нужные данные, которыми вы можете манипулировать, сколько хотите.
Это полностью не проверено . Не вините меня, если он взорвет ваш компьютер и убьет вашу кошку. Обычно я не взял бы всю работу, чтобы написать полный метод, подобный этому, но мне нравится TBXML
. Пожалуйста, дайте мне знать, если это работает. Я действительно был бы признателен за знание.