gpt4 book ai didi

c++ - RapidXML 加载 xml 文件

转载 作者:行者123 更新时间:2023-11-28 07:00:11 25 4
gpt4 key购买 nike

我无法从 xml 返回加载。这是代码:

RapidXML xml加载器

vector<char*> ParseFanbeamGeometry(char* fileName)
{
xml_document<> doc;
xml_node<> * root_node;
// Read the xml file into a vector
ifstream theFile (fileName);
vector<char> buffer((istreambuf_iterator<char>(theFile)), istreambuf_iterator<char>());
buffer.push_back('\0');
// Parse the buffer using the xml file parsing library into doc
doc.parse<0>(&buffer[0]);
// Find our root node
root_node = doc.first_node("FanbeamGeometrySettings");

vector<char*> fambeamGeometry;
// Iterate over the fangeometry
for (xml_node<> * fanGeometry_node = root_node->first_node("FanGeometry"); fanGeometry_node; fanGeometry_node = fanGeometry_node->next_sibling())
{
try
{
fambeamGeometry.push_back(fanGeometry_node->first_attribute("geometry")->value());
fambeamGeometry.push_back(fanGeometry_node->first_attribute("D")->value());
}
catch (exception &e)
{
e.what();
}
}

return fambeamGeometry;

}

主要功能

int _tmain(int argc, _TCHAR* argv[])
{
char* fangeofile = "D:\\Projects\\fanbeam\\tools\\rapidxml-1.13\\GeometrySettings.xml";

vector<char*> fambeamGeometry = ParseFanbeamGeometry(fangeofile);

float D = atof(fambeamGeometry[1])*N;

getchar();
return 0;
}

xml文件

<?xml version="1.0"?>
<FanbeamGeometrySettings>
<FanGeometry geometry="EquiDistance" D="2"/>
</FanbeamGeometrySettings>

fambeamGeometry 正确地加载了“EquiDistance”和“2”,但是当它从 ParseFanbeamGeometry() 返回到 main 时,该值变成了一些奇怪的值,例如 -18 和 -2。

有什么建议吗?我不知道为什么。如何让 xml 加载器返回它加载的内容?谢谢。

最佳答案

您的函数 ParseFanbeamGeometry 正在返回一个指针 vector ,但是一旦函数返回时 buffer 被破坏,它们指向的数据将无效。

如您所知,正确的方法是传回 std::string。无论如何,这是 C++ 中惯用的方法。

vector<std::string> ParseFanbeamGeometry(const std::string &fileName)

关于c++ - RapidXML 加载 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22597492/

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