为什么pugixml解析出来的数据在另一个函数中丢失了?
Why is the data parsed by pugixml lost in another function?
我有两个功能:
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,然后将其存储在 header 中声明的 pugi::xml_node
变量,我可以在 CreateModelLights()
等函数中使用它。
XML 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<scene>
[...]
</scene>
我得到的垃圾数据:
我应该得到的数据:
这在文档中不是很清楚,但是 PugiXML 使用相当常见的内存管理模式:pugi::xml_document
拥有 整个 XML DOM 树,pugi::xml_node
对象只是指向这棵树的浅表指针。
这意味着只要有 pugi::xml_node
个对象指向它,您就需要让 pugi::xml_document
对象保持活动状态。可能最快的方法是将 doc
提升为成员变量。
我有两个功能:
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,然后将其存储在 header 中声明的 pugi::xml_node
变量,我可以在 CreateModelLights()
等函数中使用它。
XML 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<scene>
[...]
</scene>
我得到的垃圾数据:
我应该得到的数据:
这在文档中不是很清楚,但是 PugiXML 使用相当常见的内存管理模式:pugi::xml_document
拥有 整个 XML DOM 树,pugi::xml_node
对象只是指向这棵树的浅表指针。
这意味着只要有 pugi::xml_node
个对象指向它,您就需要让 pugi::xml_document
对象保持活动状态。可能最快的方法是将 doc
提升为成员变量。