Синтаксический анализ 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 имя, но у него может быть несколько typeID, поэтому я пытаюсь сгруппировать эти значения в 1 объект, чтобы в конечном итоге я мог импортировать их все в основные данные. Я знаю, что с typeID также просто сбрасывается в массив. Я просто заблудился о том, как лучше разбить материал на элементарные строки.

Благодарю.

1 ответ

Решение

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

Другие вопросы по тегам