[Libosinfo] [PATCH v2 4/4] osinfo_loader: do not use xpath to read localized strings

Giuseppe Scrivano gscrivan at redhat.com
Tue Jun 3 18:19:04 UTC 2014


Signed-off-by: Giuseppe Scrivano <gscrivan at redhat.com>
---
 osinfo/osinfo_loader.c | 26 +++++++++++++++-----------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index 6e79e78..6fe7145 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -328,17 +328,21 @@ static void osinfo_loader_entity(OsinfoLoader *loader,
          * want to ignore that, hence the NULL check on index 'j + 1'.
          */
         if (keys[i].type == G_TYPE_STRING) {
-            for (j = 0; langs[j + 1] != NULL; j++) {
-                xpath = g_strdup_printf("string(./%s[lang('%s')])",
-                                        keys[i].name, langs[j]);
-                value_str = osinfo_loader_string(xpath, loader, ctxt, err);
-                g_free(xpath);
-                xpath = NULL;
-                if (error_is_set(err))
-                    return;
-
-                if (value_str != NULL)
-                    break;
+            xmlNodePtr it;
+            for (it = root->children; it; it = it->next) {
+                if (xmlStrEqual(it->name, BAD_CAST keys[i].name)) {
+                    xmlChar *lang = xmlGetProp(it, BAD_CAST "lang");
+                    if (lang == NULL)
+                        continue;
+
+                    for (j = 0; langs[j + 1] != NULL; j++) {
+                        if (xmlStrEqual(lang, BAD_CAST langs[j])) {
+                            gchar *content = (gchar *) it->children->content;
+                            value_str = g_strdup(content);
+                            break;
+                        }
+                    }
+                }
             }
         }
 
-- 
1.9.3




More information about the Libosinfo mailing list