2015-08-13 4 views
0

У меня есть документ XML, который мне нужно написать для использования pugixml и Cpp. Часть моего XML-документа выглядит следующим образом:Добавить строку в .xml с помощью pugixml и C++

line 4     <people> 
line 5     <guys> 
line 6     <dude name="man" delay="1" life="0.75" score="5" /> 
line 7     <dude name="man" delay="1" life="0.75" score="5" /> 
line 8     <dude name="man" delay="1" life="0.75" score="5" /> 
line 9     <dude name="man" delay="1" life="0.75" score="5" /> 
line 10     <dude name="man" delay="1" life="0.75" score="5" /> 
line 11     </guys> 
line 12     <guys> 
line 13     <dude name="man" delay="1" life="0.75" score="5" /> 
line 14     <dude name="man" delay="1" life="0.75" score="5" /> 
line 15     <dude name="man" delay="1" life="0.75" score="5" /> 
line 16     <dude name="man" delay="1" life="0.75" score="5" /> 
line 17     <dude name="man" delay="1" life="0.75" score="5" /> 
line 18     </guys> 
         </people> 

Как бы я добавить еще один (чувак имя = «человек» задержка = «1» жизнь = «0,75» оценка = «5») строки после строки 13, перемещаясь все остальные строки вниз по одному в моем. XML-файле?

Я пытаюсь ....

//get xml object 
    pugi::xml_document doc; 
//load xml file 
    doc.load_file(pathToFile.c_str); 
//edit file 
    doc.child("people").child("guys").append_copy(doc.child("people").child("guys").child("dude")); 
//save file 
doc.save_file(pathToFile.c_str); 

Но это, кажется, не работает. Есть идеи?

+1

Это не ясно, как [документация] (http://pugixml.org/docs/manual.html) имеет подведет. Вы заметили оглавление справа? –

+0

Да, я читал это, но до сих пор не знаю, как я могу заставить его работать с моей ситуацией. Не могли бы вы привести пример? – ctapp1

ответ

1

Использование XPath становится намного проще и удобочитаемо без всего этого child() вызов функций.

Для вставки в первую строку, перемещающую все остальные линии ниже, используйте prepend_copy.

Это работает здесь с Пример XML:

pugi::xml_document doc; 

//load xml file 
doc.load_file(pathToFile); 

pugi::xpath_node nodeToInsert; 
pugi::xpath_node nodeParent; 

try 
{ 
    nodeToInsert = doc.select_single_node("/people/guys[2]/dude[1]"); 
    nodeParent = doc.select_single_node("/people/guys[2]"); 
} 

catch (const pugi::xpath_exception& e) 
{ 
    cerr << "error " << e.what() << endl; 
    return -1; 
} 

nodeParent.node().prepend_copy(nodeToInsert.node()); // insert at the first row 

//save file 
std::cout << "Saving result: " << doc.save_file("output.xml") << std::endl; 
+0

Работал как шарм. Очень признателен – ctapp1

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