⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse-node-from-xml.c

📁 MANTIS是由科罗拉多大学开发的传感器网络嵌入式操作系统。 这是mantis的0.9.5版本的源码。
💻 C
字号:
#include <string.h>#include <glib.h>#include "bionet.h"#include "libbionet-internal.h"#include "bionet-util.h"bionet_node_t *libbionet_parse_node_from_xml(xmlNode *node_node) {    char *hab_type, *hab_id, *node_id;    bionet_node_t *node;    if (node_node->type != XML_ELEMENT_NODE) {        g_log(BIONET_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "invalid XML element type passed to libbionet_parse_node_from_xml()");        return NULL;    }    if (strcmp(node_node->name, "node") != 0) {        g_log(BIONET_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "non-<node> XML element passed to libbionet_parse_node_from_xml()");        return NULL;    }    node = (bionet_node_t *)calloc(1, sizeof(bionet_node_t));    if (node == NULL) {        g_log(BIONET_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "out of memory!");        return NULL;    }    //    // handle node-id    //    node_id = xmlGetProp(node_node, "node-id");    if (node_id == NULL) {        g_log(BIONET_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "error parsing <node> message, prop 'node-id' not found!");        free(node);        return NULL;    }    node->id = strdup(node_id);    xmlFree(node_id);    if (node->id == NULL) {        g_log(BIONET_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "out of memory!");        free(node);        return NULL;    }    //    // handle hab-type    //    hab_type = xmlGetProp(node_node, "hab-type");    if (hab_type == NULL) {        g_log(BIONET_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "error parsing <node> message, prop 'hab-type' not found!");        free(node->id);        free(node);        return NULL;    }    node->hab_type = strdup(hab_type);    xmlFree(hab_type);    if (node->hab_type == NULL) {        g_log(BIONET_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "out of memory!");        free(node->id);        free(node);        return NULL;    }    //    // handle hab-id    //    hab_id = xmlGetProp(node_node, "hab-id");    if (hab_id == NULL) {        g_log(BIONET_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "error parsing <node> message, prop 'hab-id' not found!");        free(node->id);        free(node->hab_type);        free(node);        return NULL;    }    node->hab_id = strdup(hab_id);    xmlFree(hab_id);    if (node->hab_id == NULL) {        g_log(BIONET_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "out of memory!");        free(node->id);        free(node->hab_type);        free(node);        return NULL;    }    // look at all those resources!    {        xmlNode *resource_node;        for (resource_node = node_node->children; resource_node != NULL; resource_node = resource_node->next) {            char *id, *flavor, *type, *value, *time;            int r;            if (resource_node->type != XML_ELEMENT_NODE) {                continue;            }            id = xmlGetProp(resource_node, "id");            flavor = xmlGetProp(resource_node, "flavor");            type = xmlGetProp(resource_node, "type");            value = xmlGetProp(resource_node, "value");            time = xmlGetProp(resource_node, "time");            if (!bionet_is_valid_name_component(id)) {                g_log(BIONET_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "NAG published node %s.%s.%s with invalid Resource-ID '%s'", node->hab_type, node->hab_id, node->id, id);                xmlFree(id);                xmlFree(flavor);                xmlFree(type);                xmlFree(value);                xmlFree(time);                bionet_node_free(node);                return NULL;            }            r = bionet_node_add_resource_with_valuestr_timestr(node, type, flavor, id, value, time);            xmlFree(id);            xmlFree(flavor);            xmlFree(type);            xmlFree(value);            xmlFree(time);            if (r < 0) {                g_log(                    BIONET_LOG_DOMAIN,                    G_LOG_LEVEL_WARNING,                    "Cannot parse resource for published node %s.%s.%s: type='%s', flavor='%s', id='%s', value='%s', time='%s'",                    node->hab_type,                    node->hab_id,                    node->id,                    type,                    flavor,                    id,                    value,                    time                );                bionet_node_free(node);                return NULL;            }        }    }    return node;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -