解析XML文件:根节点没有子节点

时间:2017-04-07 19:09:31

标签: c++ xml

我从未使用过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也没有子节点。

1 个答案:

答案 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;
}