Exemple #1
0
/**
 * 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;
}