使用 pugixml 和 C++ 向 .xml 添加行
Add line to .xml using pugixml and C++
我有一个 XML 文档需要使用 pugixml 和 Cpp 写入。我的 XML 文档的一部分如下所示:
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>
我如何在第 13 行之后添加另一行 (dude name="man" delay="1" life="0.75" score="5"),将所有其他行在我的 . 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);
但它似乎没有用。有什么想法吗?
使用 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;
我有一个 XML 文档需要使用 pugixml 和 Cpp 写入。我的 XML 文档的一部分如下所示:
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>
我如何在第 13 行之后添加另一行 (dude name="man" delay="1" life="0.75" score="5"),将所有其他行在我的 . 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);
但它似乎没有用。有什么想法吗?
使用 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;