Hi,
I think, I have solved the error in libxen/src/xen_common.c.
While building the XML data for a xen-api call, the xen-api c-binding encapsulates a set of elements (in this case strings) in a <struct> tag instead of an <array> tag.
Please see patch based on xen 3.1.
 
 
--- xen_common_orig.c   2008-01-21 09:32:02.000000000 +0100
+++ xen_common.c        2008-01-28 09:02:46.000000000 +0100
@@ -90,6 +90,8 @@
 static xmlNode *
 add_param_struct(xmlNode *);
 static xmlNode *
+add_param_array(xmlNode *);
+static xmlNode *
 add_struct_array(xmlNode *, const char *);
 static xmlNode *
 add_nested_struct(xmlNode *, const char *);
@@ -1278,7 +1280,7 @@
         const struct abstract_type *member_type = v->type->child;
         arbitrary_set *set_val = v->u.struct_val;
         abstract_value v;
-        xmlNode *data_node = add_param_struct(params_node);
+        xmlNode *data_node = add_param_array(params_node);
 
         for (size_t i = 0; i < set_val->size; i++)
         {
@@ -1595,6 +1597,16 @@
 }
 
 
+static xmlNode *
+add_param_array(xmlNode *params_node)
+{
+    xmlNode *param_node = add_container(params_node, "param");
+    xmlNode *value_node = add_container(param_node,  "value");
+
+    return xmlNewChild(value_node, NULL, BAD_CAST "array", NULL);
+}
+
+
 static void
 add_struct_member(xmlNode *struct_node, const char *name, const char *type,
                   const char *value)
 
 
Best regards
Lutz Dube