0

我在解析 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->children->name”是“text”而不是“ParticleSystem”?

我做错了什么,我该如何解决?

谢谢。

4

1 回答 1

4

节点是文档之间和文档中 的"text"空格(换行符) 。在这种情况下是您想要的节点。<SceneObject><ParticleSystem>cur->children->next<ParticleSystem>

一般可以咨询type节点的成员,判断是否是元素、文本、cdata等。

于 2010-02-18T00:52:06.767 回答