解析XML时遇到了一个小问题。我无法获得子节点的名称。
这是我的XML代码:
<?xml version="1.1" encoding='UTF-8'?>
<SceneObject>
<ParticleSystem>
</ParticleSystem>
</SceneObject>
以下是我解析XML文件的方法:
SceneObject::SceneObject(const char *_loadFromXMLFile, const char *_childType)
{
xmlNodePtr cur;
pXMLDocument = xmlParseFile( getPathForResource(_loadFromXMLFile, "xml") );
if (pXMLDocument == NULL)
{
fprintf(stderr, "Document not parsed successfully. \n");
return;
}
cur = xmlDocGetRootElement(pXMLDocument);
if (cur == NULL) {
fprintf(stderr, "Empty document\n");
xmlFreeDoc(pXMLDocument);
return;
}
if (!xmlStrEqual(cur->name, (const xmlChar *) "SceneObject"))
{
fprintf(stderr, "Document of the wrong type; root node == %s\n", cur->name);
xmlFreeDoc(pXMLDocument);
return;
}
SimpleLog("cur->name: %s", (const char*)cur->name);
cur = cur->children;
SimpleLog("cur->children->name: %s", (const char*)cur->name);
}
我在控制台中得到的是:
cur->name: SceneObject
cur->children->name: text
为什么“cur-&gt; children-&gt; name”是“text”而不是“ParticleSystem”?
我做错了什么,如何解决这个问题?
感谢。
答案 0 :(得分:4)
"text"
节点是文档中<SceneObject>
和<ParticleSystem>
之间的空格(换行符)。在这种情况下,cur->children->next
是您想要的<ParticleSystem>
节点。
通常,您可以咨询节点的type
成员,以确定它是元素,文本,cdata等。