[libgovirt] utils: Retrieve node attributes in ovirt_resource_parse_xml()



commit 21baf870323b36aa1061905cca3b8914fd52449d
Author: Eduardo Lima (Etrunko) <etrunko redhat com>
Date:   Thu May 18 17:53:33 2017 -0300

    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) <etrunko redhat com>

 govirt/ovirt-utils.c |   15 ++++++++++++++-
 govirt/ovirt-utils.h |    1 +
 2 files changed, 15 insertions(+), 1 deletions(-)
---
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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]