我从未使用过XML和XML解析器,我想用OpenGL解析一个用于模型动画的COLLADA文档。
我正在使用tinyxml2解析器,似乎我做错了。
XMLDocument _doc;
_doc.LoadFile(path.c_str());
XMLNode* pRoot = _doc.FirstChild();
XMLNode* pElement = pRoot->FirstChildElement("library_geometries");
我正在使用Xcode并且在调试模式中我可以看到,pRlement也是NULL,pRoot也没有子节点。
答案 0 :(得分:1)
在tinyxml2
中,一切都是节点,而不仅仅是元素。因此,_doc.FirstChild()
无效,因为它将您带到<COLLADA>
元素之前的节点(可能是XML标头中的属性)。你想要的是文档中的第一个子元素,即<COLLADA>
后面跟着它的第一个<library_geometries>
元素。
试试这个:
#include "tinyxml2.h"
using namespace tinyxml2;
int main()
{
XMLDocument doc;
doc.LoadFile ("collada.xml");
auto colladaElement = doc .FirstChildElement();
auto lib_geomElement = colladaElement -> FirstChildElement("library_geometries");
return 0;
}
而且,如果您想要更多的C ++ 11/14体验,可以尝试我的tinyxml2 extension,将上述内容减少到:
#include "tixml2ex.h"
int main()
{
tinyxml2::XMLDocument doc;
doc.LoadFile ("collada.xml");
auto lib_geomElement = find_element (doc, "COLLADA/library_geometries");
return 0;
}