我正在使用tinyxml。
如何复制或创建现有 XMLDocument 的副本?
http://www.grinninglizard.com/tinyxmldocs/classTiXmlDocument.html#a4e8c1498a76dcde7191c683e1220882 http://www.grinninglizard.com/tinyxmldocs/classTiXmlDocument.html#a4e8c1498a76dcde7191c683e1220882
我浏览了这个链接,上面写着使用Clone复制一个节点。但这是受保护的,我不想从中派生出一个类等。
我也不想将现有的 XMLDocument 保存到文件中,然后让另一个 XMLDocument 对象读取该文件以获取其副本。
我也无法使用执行深层复制memcpy因为我不知道整个 XML 的大小。
我也不希望一个接一个地使用两个对象,例如:
XMLDocumentObj1 = add_some_data
XMLDocumentObj2 = add_the_same_data, and so on
我想要第二个副本的主要原因是,第一个副本可能会被代码的不同部分修改,而同一副本在多个位置被“读取”。我需要确保读取 XMLDocument 时不会发生错误,因为这可能已被正在运行的线程在后台修改,并且我不会遇到程序崩溃。
这是我写的用于进行深层复制的内容。它获取源节点并将其复制到目标节点、子节点和所有节点下。内存取自目标节点的上下文。希望这对您来说是一个朝着正确方向的开始。
void CopyNode(tinyxml2::XMLNode *p_dest_parent, const tinyxml2::XMLNode *p_src)
{
// Protect from evil
if (p_dest_parent == NULL || p_src == NULL)
{
return;
}
// Get the document context where new memory will be allocated from
tinyxml2::XMLDocument *p_doc = p_dest_parent->GetDocument();
// Make the copy
tinyxml2::XMLNode *p_copy = p_src->ShallowClone(p_doc);
if (p_copy == NULL)
{
// Error handling required (e.g. throw)
return;
}
// Add this child
p_dest_parent->InsertEndChild(p_copy);
// Add the grandkids
for (const tinyxml2::XMLNode *p_node = p_src->FirstChild(); p_node != NULL; p_node = p_node->NextSibling())
{
CopyNode(p_copy, p_node);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)