Я могу проанализировать узел DBus и получить некоторый XML, который включает информацию о дочерних узлах. Тем не менее, это требует от меня синтаксического анализа XML, и я пытаюсь сделать приложение легким. Какую функцию gdbus я могу использовать, чтобы просто получить список имен объектов дочерних узлов?
Вот код, который извлекает XML.
#include <stdio.h>
#include <stdlib.h>
#include <gio/gio.h>
int main(int argc,char *argv[])
{
GError *err=NULL;
GVariant *result;
GDBusConnection *c;
const char *xml;
if ((c = g_bus_get_sync(G_BUS_TYPE_SYSTEM,NULL,&err)) == NULL) {
if (err) fprintf(stderr,"g_bus_get error: %s\n",err->message);
exit(1);
} /* if */
result = g_dbus_connection_call_sync(c,"org.bluez","/org/bluez",
"org.freedesktop.DBus.Introspectable",
"Introspect",NULL,G_VARIANT_TYPE("(s)"),
G_DBUS_CALL_FLAGS_NONE,3000,NULL,&err);
if (result==NULL) {
if (err) fprintf(stderr,"gbus_connection_call error: %s\n",
err->message);
exit(1);
} /* if */
g_variant_get(result,"(&s)",&xml);
printf("%s\n",xml);
exit(0);
}
Так что приведенный выше код работает. В глубине возвращаемого XML есть элементы, описывающие дочерние элементы объекта-узла org.bluez. В моем случае есть такой элемент:
<node name="hci0"></node>.
Однако я не хочу анализировать XML, чтобы найти это. Какие еще функции gdbus можно использовать для простого получения имен дочерних элементов org.bluez, не требуя синтаксического анализатора XML?