📄 parse-node-from-xml.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 + -