2013-05-31 5 views
1

Я использую библиотеку Google GDataXML для управления XML в приложении iOS. Xml используется для заполнения табличного представления, поэтому одна вещь, которую я хотел бы поддержать (но не текущая), - это возможность перемещения строки в виде таблицы в другое место с использованием tableView:moveRowAtIndexPath:toIndexPath:.Переместить элемент XML в другое место с помощью GDataXML

Есть ли способ сделать это с помощью 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> на новый?

UPDATE:

Для тех, кто еще хочет такой метод, как insertChild:atIndex:, проверить KissXML библиотеку. Переход от GDataXML к KissXML очень прост, так как большинство имен методов одинаковы. Библиотека KissXML объединяет классы XML Apple и имеет метод insertChild:atIndex:.

ответ

2

Вы можете сформировать изменяемый массив с элементами. Немного переместите элементы, а затем сохраните массив элементов в виде 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 для полной реализации.

+0

Очень подробный ответ! Итак, в основном, чтобы перемещать элементы вокруг, вам нужно заново создать XML-документ? –

+0

@EricAmorde Я считаю, что это способ справиться с переупорядочением :) – Anupdas

+2

Правильно, извините, я думаю, мне просто интересно, была ли встроена функциональность, как и методы 'insertNodeAtIndex:' или что-то. Благодаря! –

Смежные вопросы