解析XML文件的一部分
问题描述:
所以我现在已经停留了很长时间了。我使用libxml2,它对代码中的另一部分非常有用,但是我似乎无法想象这个问题,它让我像疯了似的。解析XML文件的一部分
我有这样的XML代码:
<MetaCommandSet>
<MetaCommand name="ChangeSystemInterval">
<ArgumentList>
<Argument name="Interval" argumentTypeRef="UnsignedByteType"></Argument>
</ArgumentList>
</MetaCommand>
现在,我想是的命令及其参数的名称。这意味着它必须留在相同的元命令中,以便我可以收集参数并将其保存到例如结构中。
代码片段:
for (cur_node = a_node; cur_node; cur_node = cur_node->next)
{
DATA TM_tmp;
COMMAND TC_tmp;
if(!xmlStrcmp(cur_node->name, "MetaCommand"))
{
TC_tmp.functionName = malloc(strlen((xmlGetProp(cur_node, "name") + 1)));
TC_tmp.functionName = xmlGetProp(cur_node, "name");
printf("Name: %s\n",TC_tmp.functionName);
/*
It now needs to keep looping this so i get every argument but it cant find any childs after argumentList
*/
}
createArray(cur_node->children);
我NOG进一步得到比获得元命令名称。我已经循环扔所有元素,如果它的MetaCommand元素,我想继续我上面所述。
请给我一些想法
答
取自我的一个源物理。你必须潜入一个水平比我深,我已经<定价> <价格AGE_GROUP = “”> < EUR> ... < /欧元> < /定价> < /价格>
{
while (cur != NULL) {
if (xmlStrcmp(cur->name, (const xmlChar *) "pricing") == 0) {
cur = cur->xmlChildrenNode;
while (cur != NULL) {
if (xmlStrcmp(cur->name, (const xmlChar *) "price") == 0) {
xmlNodePtr node = cur->xmlChildrenNode;
if (*kopf == NULL) {
*kopf = (Pricing *)HeapMalloc(sizeof(Pricing), "Pricing", 0);
ret = *kopf;
} else {
ret->next = (Pricing *)HeapMalloc(sizeof(Pricing), "Pricing", 0);
ret = ret->next;
}
parseAttribut(cur, "age_group", &(ret->age_group), fehler);
parseElement(doc, node, "EUR", &(ret->price), fehler);
}
cur = cur->next;
}
break;
}
cur = cur->next;
}
}
void parseAttribut(xmlNodePtr node, const xmlChar *str, xmlChar **dest, short muss, short *fehler)
{
*dest = xmlGetProp(node, str);
return;
}
void parseElement(xmlDocPtr doc, xmlNodePtr node, const xmlChar *str, xmlChar **dest, short muss, short *fehler)
{
short found = FALSE;
while (node) {
if (xmlStrcmp(node->name, str) == 0) {
*dest = xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
found = TRUE;
break;
}
node = node->next;
}
return;
}
你可能会喜欢显示你卡在哪里的代码片段。 – alk
不要看到这很重要,因为我几乎没有。但添加它编辑:增加:) – flexzican
' - > next'成员指向该节点的下一个*兄弟*。您必须使用' - > children'来获取节点的第一个孩子。 – nwellnhof