Bonjour.

Je tente pour la première fois d'utiliser les GMarkup. Je progresse tranquillement mais je tombe sur un fonctionnement apparemment normal mais qui me gène. Je vous explique mon dilemme.

Je commence par créé un GMarkupParseContext avec les flags suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
  priv->markupparser.start_element = gastro_xml_start_element;
  priv->markupparser.end_element = gastro_xml_end_element;
  priv->markupparser.text = gastro_xml_text;
  priv->markupparser.passthrough = gastro_xml_passthrough;
  priv->markupparser.error = gastro_xml_error;
 
  priv->markupcontext = g_markup_parse_context_new (&priv->markupparser, G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG|G_MARKUP_PREFIX_ERROR_POSITION, NULL, gastro_xml_destroy_notify);
Toutes les fonctions sont correctement déclarées et tout fonctionnement pour le mieux.

J'ai créé un fichier xml minimaliste avec une erreur volontaire sur les balises. Deux d'entre-elles se chevauchent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<xml>
<projet>
<name>coucou</name>
<dir>/home/gerald/projet/gastro/src/test</dir>
<place>
<longitude>47</place></longitude>
<latitude>5.18


<date>05/11/16</date>

<time>22:18</time>

<astromaterial></astromaterial>

<astrophoto></astrophoto>

</xml>
C'est ici que survient mon problème. Je récupère bien l'erreur du parser ("Erreur à la ligne 7, caractère 22*: L'élément «*place*» a été fermé, mais l'élément actuellement ouvert est «*longitude*»") mais la fonction g_markup_parse_context_parse(); ferme l'application ! Et malheureusement la documentation semble dire la même chose !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Once an error is reported, no further data may be fed to the GMarkupParseContext; all errors are fatal.
Y-aurait-il un moyen de garder la main ?