用快速xml查找子元素

时间:2014-04-16 17:36:21

标签: c++ xml parsing rapidxml

我尝试获取一个简单的xml的子元素,但它无法正常工作。我得到了运行时异常:Access violation reading location 0x0000000。 我只是尝试像这样访问它:

Config::Config()
{
    rapidxml::file<> xmlFile("config.xml"); 
    rapidxml::xml_document<> m_doc;
    m_doc.parse<0>(xmlFile.data());
    LOG(m_doc.first_node()->name());//simple cout makro
    LOG(findNode("test")->value()); 
}

xml_node<>* Config::findNode(const char* name)
{
    LOG("looking for "<< name);
    return m_doc.first_node()->first_node(name);
}

xml很简单:

<root>
    <test>test</test>
</root>

我确实从行LOG(m_doc.first_node()->name());获取了根元素的日志,并从&#34;获取了#34;的日志。我不知道我做错了什么?我得到了第一个应该是root的元素(而logger说的是这样),而且我试图找到名为test的第一个孩子。哪个应该有价值测试。如果我尝试打印名称等,我也会得到同样的例外。


更新 我只是尝试了LOG(m_doc.first_node() - &gt; first_node(&#34; test&#34;) - &gt; value());这确实返回了正确的值。但我不能称我的方法来做到这一点。我用这个方法做错了什么?任何线索? LOG(findNode(&#34;测试&#34;) - &GT;值());不起作用。所以有些事情是不对的。

1 个答案:

答案 0 :(得分:1)

你已经(重新)将m_doc声明为Config::Config中的一个局部变量,隐藏了可能是成员变量的内容。只是摆脱那个宣言。