首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RapidXML加载xml文件

RapidXML加载xml文件
EN

Stack Overflow用户
提问于 2014-03-23 21:42:51
回答 2查看 422关注 0票数 0

我不能从xml返回加载。以下是代码:

RapidXML xml加载器

代码语言:javascript
复制
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;

}

主要功能

代码语言:javascript
复制
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文件

代码语言:javascript
复制
<?xml version="1.0"?>
<FanbeamGeometrySettings>
  <FanGeometry geometry="EquiDistance" D="2"/>
</FanbeamGeometrySettings>

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-24 01:40:58

使用vector<std::string>代替

代码语言:javascript
复制
vector<char*> 

然后,使用string.c_str()string转换为

代码语言:javascript
复制
char*
票数 0
EN

Stack Overflow用户

发布于 2014-03-25 14:34:24

您的函数ParseFanbeamGeometry正在返回指针向量,但是当函数返回时,一旦buffer被解构,它们所指向的数据将无效。

正确的方法,正如您已经意识到的,是将std::strings传回。这是C++中惯用的方法。

代码语言:javascript
复制
vector<std::string> ParseFanbeamGeometry(const std::string &fileName)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22597492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档