/** * Create XML document * @param soap SOAP handler * @param rootNsUri Root Namespace URI * @param rootName Root node name * @return XML document */ WsXmlDocH ws_xml_create_doc( const char *rootNsUri, const char *rootName) { WsXmlDocH wsDoc = (WsXmlDocH) u_zalloc(sizeof(*wsDoc)); WsXmlNodeH rootNode; WsXmlNsH ns; char prefix[12]; if (wsDoc == NULL) { error("No memory"); return NULL; } if (!xml_parser_create_doc(wsDoc, rootName) ) { error("xml_parser_create_doc failed"); u_free(wsDoc); return NULL; } if (rootNsUri == NULL) { return wsDoc; } rootNode = ws_xml_get_doc_root((WsXmlDocH) wsDoc); ws_xml_make_default_prefix(rootNode, rootNsUri, prefix, sizeof(prefix)); ns = xml_parser_ns_add(rootNode, rootNsUri, prefix); if (ns == NULL) { error("xml_parser_ns_add failed"); ws_xml_destroy_doc(wsDoc); return NULL; } ws_xml_set_node_name(rootNode, rootNsUri, NULL); return wsDoc; }
void wsman_add_properties (WsXmlNodeH baseNode, const char* uri, const char *name, void* val) { WsXmlNodeH node = NULL; WsXmlDocH doc = NULL; int i; property_t* properties = (property_t*)val; for (i = 0; i < properties->count; i++) { char* val = properties->p_value [i]; /* try constructing xml node from the value, if success, value is XML object, if not its a string */ doc = ws_xml_read_memory(val, strlen(val), NULL, 0); if (doc != NULL) { int prefixindex; node = ws_xml_get_doc_root(doc); /* since xml doc is constructed from string it does not have the default prefix index, so scan for default prefix index and set it */ for (prefixindex = 1; prefixindex < 256; prefixindex++) { char prefix [12]; WsXmlNodeH pnode; sprintf(prefix, "n%d", prefixindex); pnode = (WsXmlNodeH)ws_xml_find_ns (node, NULL, prefix, 1); if (pnode == NULL) { break; } } doc->prefixIndex = prefixindex - 1; ws_xml_set_node_name (node, uri, name); ws_xml_duplicate_tree(baseNode, node); ws_xml_destroy_doc (doc); } else { ws_xml_add_child(baseNode, uri, name, val); } } free (properties->p_value); free (properties); return; }