深层通过tinyxml复制XML
Deep Copy an XML via TinyXML
我正在使用tinyxml。
如何复制或创建现有Xmldocument的副本?
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);
}
}
我找到了这个,我认为这可能会对您有所帮助。
https://github.com/leethomason/tinyxml2/blob/master/xmltest.cpp
const char* pub = "<?xml version='1.0'?> <element><sub/></element> <!--comment--> <!DOCTYPE>";
XMLDocument doc;
doc.Parse( pub );
XMLDocument clone;
for( const XMLNode* node=doc.FirstChild(); node; node=node->NextSibling() ) {
XMLNode* copy = node->ShallowClone( &clone );
clone.InsertEndChild( copy );
}
clone.Print();
int count=0;
const XMLNode* a=clone.FirstChild();
const XMLNode* b=doc.FirstChild();
for( ; a && b; a=a->NextSibling(), b=b->NextSibling() ) {
++count;
XMLTest( "Clone and Equal", true, a->ShallowEqual( b ));
}
XMLTest( "Clone and Equal", 4, count );
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 使用strcpy将char数组的元素复制到另一个数组
- 是否可以初始化不可复制类型的成员变量(或基类)
- Cppcheck生成xml转储文件
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 复制列表初始化的隐式转换的等级是多少
- 当从函数参数中的临时值调用复制构造函数时
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 复制几乎为空的数组的最快方法
- 以下示例中如何避免代码复制?C++/库达
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 文件系统:复制功能的速度秘诀是什么
- 用于 XML 的自定义 wxDataObject 格式,用于复制粘贴支持
- 深层通过tinyxml复制XML