В моем 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";
Я могу получить все уровни плитки.Моя проблема в том, что я хотел бы получить жидкие плитки только для слоя столкновений.
Некоторое псевдо:
//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";
ничего не найти?