【发布时间】:2011-03-31 10:03:46
【问题描述】:
在我的 XML 文件中,我有一个节点,每个层节点都有一个节点,如下所示:
<layer name="Tile Layer 1" width="30" height="30">
<data>
<tile gid="69"/>
<tile gid="69"/>
和
<layer name="Collsions" width="30" height="30">
<data>
<tile gid="0"/>
<tile gid="0"/>
<tile gid="0"/>
现在,如果我使用 xpath 使用以下语句
xmlChar *xpath = (xmlChar*) "//tile/@gid";
我可以得到所有的瓷砖 gids。我的问题是我想仅检索碰撞层的平铺 gid。
一些伪:
//get to layer node
if(name == collision)
{
get tile gids for this node list only
}
我该怎么做?
我尝试使用currentNode->xmlChildrenNode,但它在节点上掉了下来,但由于某种原因,它在某一时刻返回了“文本”?这是因为空格吗?
我在下面的代码中使用了这个(表达式改为xmlChar *xpath = (xmlChar*) "/layer[@name=\"Collisions\"]/data/tile/@gid";
xmlChar *xpath = (xmlChar*) "/layer[@name=\"Collisions\"]/data/tile/@gid";//"//tile/@gid";
xmlNodeSetPtr nodeset;
xmlXPathObjectPtr result;
int i;
xmlChar *keyword;
int numCollisionTiles = 0;
result = getnodeset (doc, xpath);
if (result)
{
nodeset = result->nodesetval;
for (i=0; i < nodeset->nodeNr; i++)
{
keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);
int id = atoi(keyword);
int index = i;
if(id == 111)
{
numCollisionTiles += 1;
index -= 899;
printf("tile id : %d for index: %d\n", id, index);
}
xmlFree(keyword);
}
xmlXPathFreeObject (result);
}
printf("number of collision tiles : %d\n", numCollisionTiles);
}
当我使用以下xmlChar *xpath = (xmlChar*) "//tile/@gid"时,此代码有效
以下可以吗
keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);
导致xmlChar *xpath = (xmlChar*) "/layer[@name=\"Collisions\"]/data/tile/@gid"; 什么都没找到?
【问题讨论】: