【发布时间】:2022-01-12 19:05:57
【问题描述】:
我有两个功能:
void XMLParser::ParseScene(const char* path)
{
// Load the XML file
pugi::xml_document doc;
pugi::xml_parse_result result = doc.load_file(path);
scene = doc.child("scene");
}
和
void XMLParser::CreateModelLights(pugi::xml_node node)
{
GLuint i = 0;
for (pugi::xml_node entity : node.children())
{
[...]
}
}
我正在调用parser.ParseScene("src/xml/scene.xml"); 来生成parser.scene,然后调用parser.CreateModelLights(parser.scene);,但它在node 参数/parser.scene 中给了我垃圾数据。
如果我将scene = doc.child("scene"); 放在CreateModelLight() 第一行,它将在parser.scene 中解析我的数据,但我不想像那样强制节点,因为我正在递归调用该函数。理想情况下,我想在 ParseScene() 中解析我的 XML,然后将其存储在标头中声明的 pugi::xml_node 变量中,我可以在 CreateModelLights() 等函数中使用它。
XML 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<scene>
[...]
</scene>
【问题讨论】:
-
这是一个变相的“悬空指针”问题:所有
pugi::xml_node对象引用pugi::xml_document内的数据。只要您有指向它的pugi::xml_node对象,您就应该保持pugi::xml_document活动。 -
我明白了。所以如果我动态分配文档并销毁文档,当我完成后我应该不会再遇到这个问题,对吧?
-
正确。就像让
doc成为XMLParser的成员一样简单。 -
@Botje 它按预期工作。您能否发布一个答案,以便我可以投票作为解决方案?
标签: c++ c xml xml-parsing pugixml