int xmlelement_set_attribute(struct xmldoc *doc, struct xmlelement *element, const char *name, const char *value) { int result = -1; assert(doc != NULL); assert(element != NULL); assert(name != NULL); assert(value != NULL); #ifdef HAVE_LIBUPNP ixmlElement_setAttribute(element->element, name, value); result = 0; #endif return result; }
struct xmlelement *xmldoc_new_topelement(struct xmldoc *doc, const char *elementName, const char *xmlns) { assert(doc != NULL); assert(elementName != NULL); IXML_Element *element; if (xmlns) { element = ixmlDocument_createElementNS(to_idoc(doc), xmlns, elementName); ixmlElement_setAttribute(element, "xmlns", xmlns); } else { element = ixmlDocument_createElement(to_idoc(doc), elementName); } ixmlNode_appendChild((IXML_Node *)(to_idoc(doc)),(IXML_Node *)element); return (struct xmlelement *) element; }
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)); }
/** * Checks for all href attributes in the provided piece of XML and inserts * @a /obix prefix if necessary to all URI's which are absolute. */ static void insertDefaultUriPrefix(IXML_Node* node) { if (node == NULL) return; // exit point for the recursion // if this node is element and has 'href' attribute than check it: IXML_Element* element = ixmlNode_convertToElement(node); if (element != NULL) { const char* href = ixmlElement_getAttribute(element, OBIX_ATTR_HREF); if ((href != NULL) && (*href == '/')) { // href attribute points to the server root // check whether it starts with /obix/ if (strncmp(href, DEFAULT_URI_PREFIX, DEFAULT_URI_PREFIX_LENGTH) != 0) { // let's add /obix prefix char newHref[strlen(href) + DEFAULT_URI_PREFIX_LENGTH + 1]; strcpy(newHref, DEFAULT_URI_PREFIX); strcpy(newHref + DEFAULT_URI_PREFIX_LENGTH, href); int error = ixmlElement_setAttribute(element, OBIX_ATTR_HREF, newHref); if (error != IXML_SUCCESS) { log_warning("Unable to update \"%s\" attribute of the object " "before storing it: ixmlElement_setAttribute " "returned %d.", OBIX_ATTR_HREF, error); } } } } // search also in child and neighbor tags insertDefaultUriPrefix(ixmlNode_getFirstChild(node)); insertDefaultUriPrefix(ixmlNode_getNextSibling(node)); }
int WriteID3Tag(char *ptrPath,ZDB_METATRACK *trackMeta) { IXML_Document *dom = NULL; IXML_Element *elementCmd = NULL; IXML_Element *element = NULL; IXML_Node *node = NULL; char *ptrXml = NULL; char *result = NULL; if((dom = ixmlDocument_createDocument()) == NULL) return ZAPP_FAILED; /*cmd node*/ if((elementCmd = ixmlDocument_createElement(dom, "cmd")) == NULL) goto errOut; /*op = WriteMetadata*/ ixmlElement_setAttribute(elementCmd,"op","WriteMetadata"); ixmlNode_appendChild(&dom->n, (IXML_Node *)elementCmd); //FileName node if((element = ixmlDocument_createElement(dom, "FileName")) == NULL) goto errOut; if((node = ixmlDocument_createTextNode(dom, ptrPath)) == NULL) { ixmlElement_free(element); goto errOut; } ixmlNode_appendChild((IXML_Node *)element, node); ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element); //artFile node if((element = ixmlDocument_createElement(dom, "artFile")) == NULL) goto errOut; if((node = ixmlDocument_createTextNode(dom, trackMeta->albumArtURI)) == NULL) { ixmlElement_free(element); goto errOut; } ixmlNode_appendChild((IXML_Node *)element, node); ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element); //title node if((element = ixmlDocument_createElement(dom, "title")) == NULL) goto errOut; if((node = ixmlDocument_createTextNode(dom, trackMeta->trackTitle)) == NULL) { ixmlElement_free(element); goto errOut; } ixmlNode_appendChild((IXML_Node *)element, node); ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element); //album node if((element = ixmlDocument_createElement(dom, "album")) == NULL) goto errOut; if((node = ixmlDocument_createTextNode(dom, trackMeta->albumname)) == NULL) { ixmlElement_free(element); goto errOut; } ixmlNode_appendChild((IXML_Node *)element, node); ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element); //artistname node if((element = ixmlDocument_createElement(dom, "artist")) == NULL) goto errOut; if((node = ixmlDocument_createTextNode(dom, trackMeta->artistname)) == NULL) { ixmlElement_free(element); goto errOut; } ixmlNode_appendChild((IXML_Node *)element, node); ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element); //genre node if((element = ixmlDocument_createElement(dom, "genre")) == NULL) goto errOut; if((node = ixmlDocument_createTextNode(dom, trackMeta->genrename)) == NULL) { ixmlElement_free(element); goto errOut; } ixmlNode_appendChild((IXML_Node *)element, node); ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element); //year node if((element = ixmlDocument_createElement(dom, "year")) == NULL) goto errOut; if((node = ixmlDocument_createTextNode(dom, trackMeta->releaseDate)) == NULL) { ixmlElement_free(element); goto errOut; } ixmlNode_appendChild((IXML_Node *)element, node); ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element); //trackNum node if((element = ixmlDocument_createElement(dom, "trackNum")) == NULL) goto errOut; if((node = ixmlDocument_createTextNode(dom, trackMeta->trackNo)) == NULL) { ixmlElement_free(element); goto errOut; } ixmlNode_appendChild((IXML_Node *)element, node); ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element); ptrXml = ixmlPrintDocument(dom); result = Call3rdPartyCommand("zxtract", ptrXml, strlen(ptrXml),32); errOut: if(result) { free(result); } ixmlDocument_free(dom); if(ptrXml != NULL) { free(ptrXml); } return ZAPP_SUCCESS; }