Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche xml -> xpath ?

4 réponses
Avatar
Messenger of the red snake mountain
Bonjour à tous!

J'ai conçu une application de type 'intranet collaboratif' actuellement basée sur
sql2000. Je souhaiterais également pouvoir la rendre compatible avec des
bases sous format XML, pour des structures ne permettant pas l'installation d'un
sgbd. Le système est déjà compatible Access mais c'est surtout histoire d'ajouter
une fonctionnalité demandée par un client un peu maniaque sur ce point et également
pour ma formation personnelle.

Je n'ai aucun problème pour tout ce qui est de l'écriture/mise à jour/enregistrement
de données mais .... il y a pas mal d'options de recherche dans les modules.

Comment chercher dans le fichier xml ? J'ai entendu parler de xpath, est-ce la
bonne direction à prendre où y a-t'il autre chose de plus 'adapté' ? Ce n'est pas
une difficulté de trouver un tutoriel xpath mais si quelqu'un a déjà une adresse
'testée et approuvée' à conseiller, ce sera avec plaisir.

.antoine

4 réponses

Avatar
LEBRUN Thomas
Si j'ai bien compris, tu voudrais pouvoir faire une recherche dans un fichier
XML ?
Si c'est bien cela, je vois 2 possibilités:
- mettre le contenu de ce fichier dans un DataSet, et après, tu pourras
utiliser la méthode Select pour faire tes recherche
- mettre le contenu de ce fichier dans un DataSet, et après, utiliser une
DataView
- utiliser un XmlDocument, mais je ne sais pas si l'on peut faire des
recherches avec, il faudrait regarder cela en détails.

A+

-------------------
LEBRUN Thomas
http://morpheus.developpez.com

"Messenger of the red snake mountain" wrote:

Bonjour à tous!

J'ai conçu une application de type 'intranet collaboratif' actuellement basée sur
sql2000. Je souhaiterais également pouvoir la rendre compatible avec des
bases sous format XML, pour des structures ne permettant pas l'installation d'un
sgbd. Le système est déjà compatible Access mais c'est surtout histoire d'ajouter
une fonctionnalité demandée par un client un peu maniaque sur ce point et également
pour ma formation personnelle.

Je n'ai aucun problème pour tout ce qui est de l'écriture/mise à jour/enregistrement
de données mais .... il y a pas mal d'options de recherche dans les modules.

Comment chercher dans le fichier xml ? J'ai entendu parler de xpath, est-ce la
bonne direction à prendre où y a-t'il autre chose de plus 'adapté' ? Ce n'est pas
une difficulté de trouver un tutoriel xpath mais si quelqu'un a déjà une adresse
'testée et approuvée' à conseiller, ce sera avec plaisir.

..antoine





Avatar
Ambassadeur Kosh
> - utiliser un XmlDocument, mais je ne sais pas si l'on peut faire des
recherches avec, il faudrait regarder cela en détails.



SelectSingleNode et SelectNode

effectivement, le langage de selection s'appelle xpath. ça s'apparente
etrangemebt à la commande cd. peut être un rapport avec la notion d'arbre
:o)

le tutorial xpath que je prefere, c'est celui de zvon.
profite en pour matter xsl, ça va pas tarder à venir je pense :o)
http://www.zvon.org/xxl/XPathTutorial/General/examples.html

deux trois exemples pour te donner une idée

<racine>
<client nom="dudule">
<facture montant="25.68"/>
<facture montant="32.68"/>
</client>
<client nom="troullou" banni="et pour cause">
</client>
<client nom="kosh" >
<facture montant="25.68"/>
<facture montant="32.68"/>
<facture montant="12.34"/>
</client>
<contact nom="charles" adresse="dans le 92" banni="pas assez influent"/>
<contact nom="pascal" adresse="marseille"/>
<archives>
<client nom="bebere">
<facture montant="89.68"/>
<facture montant="1256.34"/>
</client>
<contact nom="jacques" adresse="elysee"/>
</archives>
<racine>

et maintenant, les requetes

/racine//client : tous les clients directs ou indirects sous la racine
/racine/client : tous les contact juste sous la racine
//client[@banni] : tous les clients qui ont l'attribut banni, peut importe
sa valeur
//client[not(@banni)] : tous les clients qui ne sont pas banni
//client[count(facture)>1] : tous les clients qui ont plus d'une facture
/*/clients[@nom='kosh']/facture les factures de ce bon vieux kosh
/racine/* tous les elements sous la racine
/racine/*/facture toute facture d'un element sous la racine
//*[@nom] tout ce qui a un nom
//*[@nom='trollou'] tout ce qui s'appelle trollou
/racine/client[facture/@montant>10] tout client sous la racine qui a au
moins une facture d'un montant plus grand que 10
/*/client | /*/contact tout ce qui est client ou contact direct de la
racine

etc etc etc. bon amusement
Avatar
LEBRUN Thomas
> SelectSingleNode et SelectNode



Voila qui répond à mon interrogation : plus besoin de chercher :)

Merci

-------------------
LEBRUN Thomas
http://morpheus.developpez.com


"Ambassadeur Kosh" wrote:

> - utiliser un XmlDocument, mais je ne sais pas si l'on peut faire des
> recherches avec, il faudrait regarder cela en détails.

SelectSingleNode et SelectNode

effectivement, le langage de selection s'appelle xpath. ça s'apparente
etrangemebt à la commande cd. peut être un rapport avec la notion d'arbre
:o)

le tutorial xpath que je prefere, c'est celui de zvon.
profite en pour matter xsl, ça va pas tarder à venir je pense :o)
http://www.zvon.org/xxl/XPathTutorial/General/examples.html

deux trois exemples pour te donner une idée

<racine>
<client nom="dudule">
<facture montant="25.68"/>
<facture montant="32.68"/>
</client>
<client nom="troullou" banni="et pour cause">
</client>
<client nom="kosh" >
<facture montant="25.68"/>
<facture montant="32.68"/>
<facture montant="12.34"/>
</client>
<contact nom="charles" adresse="dans le 92" banni="pas assez influent"/>
<contact nom="pascal" adresse="marseille"/>
<archives>
<client nom="bebere">
<facture montant="89.68"/>
<facture montant="1256.34"/>
</client>
<contact nom="jacques" adresse="elysee"/>
</archives>
<racine>

et maintenant, les requetes

/racine//client : tous les clients directs ou indirects sous la racine
/racine/client : tous les contact juste sous la racine
//client[@banni] : tous les clients qui ont l'attribut banni, peut importe
sa valeur
//client[not(@banni)] : tous les clients qui ne sont pas banni
//client[count(facture)>1] : tous les clients qui ont plus d'une facture
/*/clients[@nom='kosh']/facture les factures de ce bon vieux kosh
/racine/* tous les elements sous la racine
/racine/*/facture toute facture d'un element sous la racine
//*[@nom] tout ce qui a un nom
//*[@nom='trollou'] tout ce qui s'appelle trollou
/racine/client[facture/@montant>10] tout client sous la racine qui a au
moins une facture d'un montant plus grand que 10
/*/client | /*/contact tout ce qui est client ou contact direct de la
racine

etc etc etc. bon amusement





Avatar
Messenger of the red snake mountain
C'est précisémment l'information que je cherchais !
Merci bien !!!

.antoine



--





------------oOoo---Ôô----ooOo---------------------------
Antonio FONTES (well, me, actually)
http://www.nxtg.net/saphyr/ (tout et rien en français)
http://www.nxtg.net/is/ (blog - développeur web)
E-mail:
-------------------------------------------------------------