Rapidxml导致奇怪的问题
Rapidxml causing weird problems
我在使用rapidxml时遇到了问题。下面的代码给了我输出:http://pastebin.com/352MxuQY
但是当我删除我附加节点的循环或"{}"时,我得到了很好的输出:http://pastebin.com/H0YQGwV1
为什么会这样?
rapidxml::xml_document<> andDoc;
ifstream andfile(PATH+XMLNAME);
vector<char> buffer((istreambuf_iterator<char>(andfile)), istreambuf_iterator<char>( ));
buffer.push_back(' ');
cout<<&buffer[0]<<endl;
andDoc.parse<0>(&buffer[0]);
xml_node<>* cos = andDoc.first_node("Data")->first_node("Classifiers");
xml_node<>* klda = andDoc.first_node("Data")->first_node("Kldas");
for(int i=0;i<1;i++)
{
rapidxml::xml_document<> doc;
ifstream myfile(cPATH+"0\c.xml");
vector<char> buffer2((istreambuf_iterator<char>(myfile)), istreambuf_iterator<char>( ));
buffer2.push_back(' ');
cout<<&buffer2[0]<<endl;
doc.parse<0>(&buffer2[0]);
xml_node<>* cl = doc.first_node();
xml_node<>* asd = doc.clone_node(cl);
cos->append_node(asd);
myfile.close();
}
std::ofstream file(PATH+XMLNAME);
if (file.is_open())
{
file.clear();
file << andDoc;
file.close();
}
有点晚了,但我认为正在发生的事情是:RapidXML的clone_node
并不像你想象的那样工作。
从文档中,增加了一些重点...
概要
xml_node<Ch>* clone_node(const xml_node< Ch > *source, xml_node< Ch > *result=0);
描述
克隆xml_node及其子节点和属性的层次结构。节点和属性是从此内存池中分配的。名称和值不会克隆,而是在克隆和源之间共享。可以选择将结果节点指定为第二个参数,在这种情况下,其内容将替换为克隆的源节点。当您想要克隆整个文档时,这很有用。
因此,正在发生的事情是,当xml_document"doc"在 for 循环结束时超出范围时,克隆节点的名称和值超出范围(因此丢失)。鉴于此限制,我无法诚实地看出clone_node
有什么用。
我不确定如何最好地解决这个问题 - 这取决于您的实际需求,但您可能需要以某种方式将所有源文档保留在范围内,直到创建最终输出。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 使用 RapidXML 解析大型 XML(大小大于 65 KB)文件时出现问题
- Rapidxml导致奇怪的问题
- 使用rapidxml进行读取和打印.打印多个同级C++时出现问题
- RapidXML从文件中读取-这里有什么问题