[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