Bonjour,

Je travaille avec une application qui utilise en interne un langage proche du SQL afin d'interroger ses données.

J'ai de mon côté un programme qui reproduit la structure de la base afin d'interroger un module de cette application qui utilise une autre syntaxe.

Sans trop entrer dans les détails, d'un côté, je peux interroger l'application avec cette syntaxe :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
select (CoGrp, CoNo, Company, Country, FreeN1, KP.Sex, KP.LastName, KP.FirstName, KP.FreeN1)
from (FI)
where (CoGrp='1' AND CoNo='123')
with (KP)
where (PeGrp='1' AND PeNo='45')

Et de l'autre, avec ce type de requête (qui fait la même chose) :
Code xml : 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
20
21
 
<?xml version='1.0'?>
<request>
  <query>
    <tables>
      <table tablename="FI">
        <table tablename="KP"/>
      </table>
    </tables>
    <fields tablename="FI" fields="CoGrp,CoNo,Company,Country,FreeN1"/>
    <fields tablename="KP" fields="Sex,LastName,FirstName,FreeN1"/>
    <condition>
      <cond tablename="FI" fieldname="CoGrp" op="=" value="1"/>
      <cond tablename="FI" fieldname="CoNo" op="=" value="123"/>
    </condition>
    <condition>
      <cond tablename="KP" fieldname="PeGrp" op="=" value="1"/>
      <cond tablename="KP" fieldname="PeNo" op="=" value="45"/>
    </condition>
  </query>
</request>

Actuellement, j'ai écrit du code qui me permet de passer d'objets à la syntaxe XML :
Code csharp : 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
 
Request request = new(client);
Query query = new(client);
request.RequestElements.Add(query);
Table fi = new Table(client, "FI");
Table kp = new Table(client, "KP");
fi.Tables.Add(kp);
query.Tables.Add(fi);
query.Fields.Add(new Fields(fi, "CoGrp,CoNo,Company,Country,FreeN1"));
query.Fields.Add(new Fields(kp, "Sex,LastName,FirstName,FreeN1"));
Condition conditionfi = new(fi);
query.Conditions.Add(conditionfi);
conditionfi.AddCondition("CoGrp", "=", "1");
conditionfi.AddCondition("CoNo", "=", "123");
Condition conditionkp = new(kp);
query.Conditions.Add(conditionkp);
conditionkp.AddCondition("PeGrp", "=", "1");
conditionkp.AddCondition("PeNo", "=", "197874");
Response response = client.SendRequest(request);

En revanche, je ne sais pas trop comment m'y prendre pour parser la première syntaxe pour initialiser les objets.

Je sais que c'est le genre de travaux qui se fait en cours d'école d'ingé (enfin, à une époque en tout cas c'était le cas) donc j'imagine que ce n'est pas ultra compliqué, mais pour ça faut une méthode...
Si je cherche sur internet comment parser du code, je ne trouve que des librairies spécialisées (SQL, Python, etc.) sauf que moi je veux parser un langage spécifique pour lequel je ne trouverai pas de librairie toute faite...

Le but recherché étant de pouvoir faire produire simplement des requêtes de la première syntaxe par les utilisateurs (d'autant qu'il y a un assistant pour les écrire) et qu'ensuite ils puissent les soumettre telles qu'elles à mon programme pour qu'il interroge les données en automatique.

Des suggestions ?