Разбор XML — группировка атрибутов в nsdictionary с помощью KissXML и XPath

моя цель - проанализировать этот XML-документ https://api.eveonline.com/eve/SkillTree.xml.aspx и, в конечном итоге, включить его в основные данные.

но фрагмент, с которым у меня проблемы,

<rowset name="requiredSkills" key="typeID" columns="typeID,skillLevel">
          <row typeID="13279" skillLevel="3" />
          <row typeID="3402" skillLevel="4" />
        </rowset>

проблема, с которой я столкнулся, заключается в том, чтобы выяснить, как сохранить вместе typeID и skillLevel для сохранения в nsdictionary.

Таким образом, цель состоит в том, чтобы поместить каждый <row typeID="13279" skillLevel="3" /> в свой собственный объект.

основной код, который я использую,

-(void)parseXMLFromBundle
{
NSError *error;

NSString *path = [[NSBundle mainBundle] pathForResource:@"SkillTree" ofType:@"xml"];

DDXMLDocument *xmlDoc = [[DDXMLDocument alloc] initWithData:[NSData dataWithContentsOfFile:path] options:0 error:&error];

//main array with everything
NSArray *xmlItems = [xmlDoc nodesForXPath:@"//result" error:&error];
//go through it to extract each thing
for (DDXMLElement *itemElement in xmlItems)
{
self.typeArray = [itemElement nodesForXPath:@"//@typeName" error:&error];

self.requiredIDArray = [itemElement nodesForXPath:@"//row[@typeID]/@typeID" error:&error];
DLog(@"required SkillID: %@",self.requiredIDArray);

}

TypeName работает нормально, каждый объект, который я хочу, имеет только 1 имя, но он может иметь несколько идентификаторов типа, поэтому я пытаюсь сгруппировать эти значения в 1 объект, чтобы в конечном итоге я мог импортировать все это в основные данные. Я знаю, что идентификаторы типов также просто сбрасываются в массив. Я просто потерялся в том, как лучше отделить вещи по элементарной строке.

Спасибо.


person BigB    schedule 25.12.2012    source источник


Ответы (1)


Это было бы намного проще, если бы вы использовали NSXMLParser. При каждом открытии тега строки вы должны создавать новый объект для его представления. Вы также получаете словарь всех атрибутов в это время, и поэтому вы должны установить свойства нового экземпляра объекта строки с ним.

person Cocoanetics    schedule 25.12.2012
comment
Я так и думал, просто не тем инструментом ковырял, спасибо - person BigB; 25.12.2012