From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: "Eduardo Lima (Etrunko)" Date: Thu, 18 May 2017 17:53:33 -0300 Subject: [PATCH] utils: Retrieve node attributes in ovirt_resource_parse_xml() This commit adds a new field to the OvirtXmlElement struct, which is used to retrieve an attribute from the xml node. It is optional, meaning that, if not informed, the function will still retrieve the node contents instead. We also introduce ovirt_rest_xml_node_get_attr_from_path() function, to retrieve the given attribute value from the path below the node, much similar to ovirt_rest_xml_node_get_content_from_path(). Signed-off-by: Eduardo Lima (Etrunko) --- govirt/ovirt-utils.c | 15 ++++++++++++++- govirt/ovirt-utils.h | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/govirt/ovirt-utils.c b/govirt/ovirt-utils.c index c0541e9..b9b7c15 100644 --- a/govirt/ovirt-utils.c +++ b/govirt/ovirt-utils.c @@ -84,6 +84,16 @@ ovirt_rest_xml_node_get_content_from_path(RestXmlNode *node, const char *path) return node->content; } +static const char * +ovirt_rest_xml_node_get_attr_from_path(RestXmlNode *node, const char *path, const char *attr) +{ + node = ovirt_rest_xml_node_find(node, path); + if (node == NULL) + return NULL; + + return rest_xml_node_get_attr(node, attr); +} + static gboolean _set_property_value_from_type(GValue *value, GType type, @@ -141,7 +151,10 @@ ovirt_rest_xml_node_parse(RestXmlNode *node, const char *value_str; GValue value = { 0, }; - value_str = ovirt_rest_xml_node_get_content_from_path(node, elements->xml_path); + if (elements->xml_attr != NULL) + value_str = ovirt_rest_xml_node_get_attr_from_path(node, elements->xml_path, elements->xml_attr); + else + value_str = ovirt_rest_xml_node_get_content_from_path(node, elements->xml_path); g_value_init(&value, elements->type); if (_set_property_value_from_type(&value, elements->type, value_str, node)) diff --git a/govirt/ovirt-utils.h b/govirt/ovirt-utils.h index e786311..545847a 100644 --- a/govirt/ovirt-utils.h +++ b/govirt/ovirt-utils.h @@ -33,6 +33,7 @@ struct _OvirtXmlElement const char *prop_name; GType type; const char *xml_path; + const char *xml_attr; /* if NULL, retrieve node content instead of attribute */ }; RestXmlNode *ovirt_rest_xml_node_from_call(RestProxyCall *call);