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 中。

所以目标是将每个&lt;row typeID="13279" skillLevel="3" /&gt; 放入自己的对象中。

我使用的主要代码是

-(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 不返回 xpath 查询的值

使用 KissXML 处理 wcf Rest Web 服务 - 我应该如何处理命名空间问题

如何在 KissXML 中转储 XML

如何从 KISSXML 中删除 xml 声明?

iPhone libxml2 未定义符号(带有 gdata、kissxml、touchxml 等)

KissXML 和 GData 已弃用?