gpt4 book ai didi

C++ rapidxml 不能正确使用保存的 xml_document

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:15 25 4
gpt4 key购买 nike

我正在尝试将一些 xml 字符串解析为 xml_document,并将 xml_document 保存到变量以供进一步使用。解析后直接可以使用 xml_document,但我无法从其他方法访问它。

示例代码如下:XML.h

//
// Created by artur on 18.07.18.
//

#ifndef PLSMONITOR_XML_H
#define PLSMONITOR_XML_H
#include <rapidxml/rapidxml.hpp>

class XML {

public:
XML();
void print();

private:
rapidxml::xml_document<> _store_xml;

};

#endif //PLSMONITOR_XML_H

XML.cpp

//
// Created by artur on 18.07.18.
//

#include "XML.h"
#include <string>
#include <cstring>
#include <iostream>

using namespace std;
XML::XML() {
std::string str{"<Store>"
" <Field1>1</Field1>"
"</Store>"
""};
char* cstr = new char[str.size() + 1];
strcpy (cstr, str.c_str());
_store_xml.parse<0>(cstr);
// this prints the 1
cout <<_store_xml.first_node("Store")->first_node("Field1")->value() << endl;
delete [] cstr;

}

void XML::print() {
// this exits with Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
cout <<_store_xml.first_node("Store")->first_node("Field1")->value() << endl;

}

int main(int argc, char *argv[]) {
cout << "Test of XML" << endl;
XML xml{};
xml.print();
}

在构造函数中使用xml_document是可以的,但是在print方法中使用它会崩溃。这是控制台输出:

Test of XML 1

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

有人知道如何正确使用 rapidxml 文档并保存 xml 结构以供进一步使用吗?

谢谢

最佳答案

问题是您在处理文档之前处理 xml 字符串违反了 xml_document::parse 方法的约定,如 stated in the documentation

The string must persist for the lifetime of the document.

xml_document 不会复制字符串内容以避免额外的内存分配,因此字符串必须保持事件状态。您可以将字符串设为类字段。另请注意,对于 C++17,字符串类中有一个非 const 限定的 data 方法,因此无需分配另一个临时缓冲区。

关于C++ rapidxml 不能正确使用保存的 xml_document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51410259/

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