gpt4 book ai didi

c++ - RapidXML:段错误; first_node() 返回 NULL

转载 作者:行者123 更新时间:2023-11-30 03:44:01 26 4
gpt4 key购买 nike

我已经尝试了一些事情并且到达了同一个地方。基本上在调用first_node()之后我得到 NULL或乱七八糟的 xterm 的无意义的二进制文件,然后我需要关闭并重新打开它。

首先获取数据。我用两种方式做了这件事

<强>1。 RapidXML file<>

#include <xml/rapidxml.hpp> //--XML Parser for configuration files
#include <xml/rapidxml_utils.hpp>

//....

file<> xml_l(name_layout.c_str());
class xml_document<> doc_l;
class xml_node<> * node;

//....

doc_l.parse<parse_full>(xml_l.data());

//....

node = doc_l.first_node("window");

if(!node) cerr << "F F F F" << endl;

<强>2。静态变量 可能不是最好的方法。但这似乎是等效的,并且是我遇到之前的原始方法 rapidxml::file<> .几乎一样,只是在函数中获取文件。返回的指针传递给xml_document::parse() .

char * file_get_contents (const string &file) {
ifstream ifile;
static vector< vector<char> > xml;
vector<char> data;


ifile.exceptions( ifstream::failbit | ifstream::badbit );

try {
ifile.open(file.c_str(),ios::in | ios::binary);
ifile.seekg(0, ios::end);

data.resize(((int)ifile.tellg())+1);

ifile.seekg(0, ios::beg);
ifile.read(&data[0], data.size()-1);
ifile.close();

data.back() = '\0';
xml.push_back(data);

return const_cast<char *>(&((xml.back())[0]));
} catch (ifstream::failure e) {
cerr << "Could not open file: " << file.c_str() << endl;
}
}

我可以获取任一方法返回的指针并使用 cout 显示整个文件.这两种情况我都得到 NULLfirst_node("window") 返回.我得到我的审查 cerr打印后,我的提示缩进并且 xterm 无法按如下所述工作。如果我不带参数调用它,我会得到一个元素节点。如果我尝试显示名称或值,我可以看到一个字符(从 name() 永远不会到 value() )。看起来有点像白色椭圆形的黑色问号,xterm 停止运行。下一行包含我缩进的提示。按键什么都不做。

尝试删除 class之前xml_document/node<> ,没有改变任何东西。

来自 XML 文件的样本

<!-- language: lang-xml -->
<layout>
<window id="app_header">
<head>
<title value="Script Manager" />
<color
fgcolor="yellow"
bgcolor="blue"
intensity="high"
/>
</head>
<height min="1" max="1" value="1" />
<width value="*" />
<color
fgcolor="default"
bgcolor="default"
/>
</window>
<!--Few more window sections described. Same format. Different height values and colors -->
</layout>

最佳答案

window 不是您的 xml 文件的根节点,layout 是。您需要先获取该节点,然后获取 window 作为它的子节点。

xml_node<> rootNode = doc_l.first_node("layout", 6);
xml_node<> windowNode = rootNode.first_node("window", 6);

Rapidxml 将 xml 解析为层次结构,因此您需要将其作为树来遍历。

关于c++ - RapidXML:段错误; first_node() 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35727908/

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