0

我尝试的目标是解析这个 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 也只是被全部转储到一个数组中。我只是迷失了如何让元素行更好地分隔东西。

谢谢。

4

1 回答 1

0

如果您使用 NSXMLParser,那会容易得多。在每个行标签的开头,您将创建一个新对象来表示它。此时您还将获得所有属性的字典,因此您可以使用它设置新行对象实例的属性。

于 2012-12-25T09:53:06.673 回答