使用GDataXML将XML元素移动到不同的位置

时间:2013-05-31 16:58:42

标签: ios objective-c xml gdata gdataxml

我目前正在使用Google的GDataXML库来操作我的iOS应用中的XML。 xml用于填充表视图,因此我想支持的一件事(但目前不支持)是能够使用tableView:moveRowAtIndexPath:toIndexPath:将表视图中的行移动到不同的位置。

有没有办法使用GDataXML轻松完成?

例如,假设这是我的xml的样子:

<root>
    <section>    
        <item>
              <name>Item 1</name>
              <description>The first item</description>
        </item>
        <item>
              <name>Item 2</name>
              <description>The second item</description>
        </item>
        <item>
              <name>Item 3</name>
              <description>The third item</description>
        </item>
    </section>
</root>

如果将Item 3移到Item 1所在的位置,我需要做些什么?它是否类似于将新元素插入数组的前面?

感谢您的帮助!

编辑:稍微更改了我的示例xml。我能以某种方式用新的<section>取代整个insertChild:atIndex:吗?

更新:

对于其他想要insertChild:atIndex:等方法的人,请查看KissXML库。从GDataXML到K​​issXML的过渡非常简单,因为大多数方法名称都是相同的。 KissXML库基于Apple的XML类,它有一个{{1}}方法。

1 个答案:

答案 0 :(得分:2)

您可以使用项目形成可变数组。稍微移动项目然后您可以将items数组保存为xml。

你可以用这种方式编写xml。我创建了一个带有键名和描述的字典数组

GDataXMLElement *rootElement = [GDataXMLNode elementWithName:@"root"];
GDataXMLElement *sectionElement = [GDataXMLNode elementWithName:@"section"];

for (NSDictionary *dict in self.items) {

    GDataXMLElement *itemElement = [GDataXMLElement elementWithName:@"item"];

    GDataXMLElement *nameElement = [GDataXMLNode elementWithName:@"name" stringValue:dict[@"name"]];
    GDataXMLElement *descElement = [GDataXMLNode elementWithName:@"description" stringValue:dict[@"description"]];

    [itemElement addChild:nameElement];
    [itemElement addChild:descElement];

    [sectionElement addChild:itemElement];

}

[rootElement addChild:sectionElement];



GDataXMLDocument *document = [[GDataXMLDocument alloc]
                              initWithRootElement:rootElement];

NSData *xmlData = document.XMLData;

现在可以将此xmlData写入fileLocation。

您可以查看此source code以获得完整的实施。