XML 解析 - 使用 KissXML 和 XPath 将属性分组到 nsdictionary
Posted
技术标签:
【中文标题】XML 解析 - 使用 KissXML 和 XPath 将属性分组到 nsdictionary【英文标题】:XML parsing - grouping attributes into nsdictionary with KissXML and XPath 【发布时间】:2012-12-25 03:23:08 【问题描述】:我尝试的目标是解析这个 xml 文档 https://api.eveonline.com/eve/SkillTree.xml.aspx 并最终将其放入核心数据中。
但我遇到问题的 sn-p 是
<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,那会容易得多。在每个行标签的开头,您将创建一个新对象来表示它。此时您还将获得所有属性的字典,因此您可以使用它设置新行对象实例的属性。
【讨论】:
这就是我的想法,我只是用错误的工具敲打这个,谢谢以上是关于XML 解析 - 使用 KissXML 和 XPath 将属性分组到 nsdictionary的主要内容,如果未能解决你的问题,请参考以下文章
使用 KissXML 处理 wcf Rest Web 服务 - 我应该如何处理命名空间问题