gpt4 book ai didi

c++ - 如何使用 RapidXml for C++ 使用字符串在 xml_document 中插入新节点?

转载 作者:数据小太阳 更新时间:2023-10-29 02:32:24 25 4
gpt4 key购买 nike

std::string src = "<xml><node1>aaa</node1><node2>bbb</node2><node1>ccc</node1></xml>";
std::string src2 = "<nodex>xxx</nodex>";

我想使用 RapidXml 将 src2 中的节点附加到 src 中的树中我这样做:

xml_document<> xmldoc;
xml_document<> xmlseg;
std::vector<char> s(src.begin(), src.end());
std::vector<char> x(src2.begin(), src2.end());
xmldoc.parse<0>(&s[0]);
xmlseg.parse<0>(&x[0]);
xml_node<>* a = xmlseg.first_node(); /* Node to append */
xmldoc.first_node("xml")->append_node(a); /* Appending node a to the tree in src */

好吧,它编译得很好,但是在运行时我遇到了这个可怕的错误:

void rapidxml::xml_node::append_node(rapidxml::xml_node*) [with Ch = char]: Assertion `child && !child->parent() && child->type() != node_document' failed. Aborted

我不知道怎么办。问题很简单我需要将一个节点附加到树 (xml) 但我有字符串。

我猜这是因为我试图将一棵树的节点插入到另一棵树中...只有为给定树分配的节点才能添加到该树中...这很糟糕...

有没有一种方法可以让我以简单的方式完成我需要的事情?

谢谢。

最佳答案

#include <iostream>
#include <string>
#include <vector>

#include <rapidxml.hpp>
#include <rapidxml_print.hpp>

int main(){
std::string src = "<xml><node1>aaa</node1><node2>bbb</node2><node1>ccc</node1></xml>";
std::string src2 = "<nodex><nodey>xxx</nodey></nodex>";
//std::string src2 = "<nodex>xxx</nodex>";
rapidxml::xml_document<> xmldoc;
rapidxml::xml_document<> xmlseg;

std::vector<char> s( src.begin(), src.end() );
s.push_back( 0 ); // make it zero-terminated as per RapidXml's docs

std::vector<char> x(src2.begin(), src2.end());
x.push_back( 0 ); // make it zero-terminated as per RapidXml's docs

xmldoc.parse<0>( &s[ 0 ] );
xmlseg.parse<0>( &x[0] );

std::cout << "Before:" << std::endl;
rapidxml::print(std::cout, xmldoc, 0);

rapidxml::xml_node<>* a = xmlseg.first_node(); /* Node to append */

rapidxml::xml_node<> *node = xmldoc.clone_node( a );
//rapidxml::xml_node<> *node = xmldoc.allocate_node( rapidxml::node_element, a->name(), a->value() );
xmldoc.first_node("xml")->append_node( node ); /* Appending node a to the tree in src */

std::cout << "After :" << std::endl;
rapidxml::print(std::cout, xmldoc, 0);
}

输出:

<xml>
<node1>aaa</node1>
<node2>bbb</node2>
<node1>ccc</node1>
</xml>

After :
<xml>
<node1>aaa</node1>
<node2>bbb</node2>
<node1>ccc</node1>
<nodex>
<nodey>xxx</nodey>
</nodex>
</xml>

关于c++ - 如何使用 RapidXml for C++ 使用字符串在 xml_document 中插入新节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4675329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com