IXML_Node* xmldb_getMetaVariable(IXML_Element* obj, const char* name) { IXML_Element* metaInfo = xmldb_getMetaInfo(obj); if (metaInfo == NULL) { return NULL; } // iterate through all meta tags until we find corresponding name IXML_Node* metaNode = ixmlNode_getFirstChild(ixmlElement_getNode(metaInfo)); for (; metaNode != NULL; metaNode = ixmlNode_getNextSibling(metaNode)) { IXML_Element* metaElement = ixmlNode_convertToElement(metaNode); if (metaElement == NULL) { // this piece of meta data is not an element - ignore it continue; } if (strcmp(ixmlElement_getTagName(metaElement), name) == 0) { return ixmlAttr_getNode( ixmlElement_getAttributeNode(metaElement, OBIX_ATTR_VAL)); } } // no meta tag with such name found return NULL; }
int L_getAttributeNode(lua_State *L) { IXML_Attr *attr = ixmlElement_getAttributeNode(checkelement(L, 1), luaL_checkstring(L,2)); if (attr == NULL) lua_pushnil(L); else pushLuaAttr(L, attr); return 1; }
IXML_Node* xmldb_putMetaVariable(IXML_Element* element, const char* name, const char* value) { int error; IXML_Element* meta = xmldb_getMetaInfo(element); if (meta == NULL) { // create a new meta tag meta = ixmlElement_createChildElementWithLog(element, OBIX_META); if (meta == NULL) { log_error("Unable to create meta tag."); return NULL; } } // create new meta item IXML_Element* metaItem = ixmlElement_createChildElementWithLog(meta, name); if (metaItem == NULL) { log_error("Unable to create meta item."); return NULL; } // set meta item value error = ixmlElement_setAttribute(metaItem, OBIX_ATTR_VAL, value); if (error != IXML_SUCCESS) { log_error("Unable to create meta item. " "ixmlElement_setAttribute() returned %d.", error); return NULL; } // return link to the created attribute return ixmlAttr_getNode( ixmlElement_getAttributeNode(metaItem, OBIX_ATTR_VAL)); }