PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → XMLLecteur possible de compter sans tout parcourir ?
XMLLecteur possible de compter sans tout parcourir ?
Débuté par Yoda, 08 juin 2023 20:24 - 5 réponses
Membre enregistré
168 messages
Popularité : +2 (2 votes)
Posté le 08 juin 2023 - 20:24
Bonsoir à tous,

J'ai quelques gros fichiers xlm à importer et je me suis dit que c'était l'occasion de tester le lecteur xml.

L'import ne me pose pas de problème, même si je pense que je pourrais encore l'optimiser.
Actuellement, je parcours tout le XML avec des indentations de POUR TOUT EN PROFONDEUR
Il y a 2-3 trucs que je n'ai pas trouvé comment les mettre en place et qui me feraient gagner pas mal de temps lors de l'import.

1. est-ce qu'il y a un moyen (sans parcourir tout le fichier) de connaitre le nombre d'élements d'un certain niveau ? Ou encore mieux, ceux dont le nom = xxxxx
Admettons que j'ai un fichier xml avec 8 niveaux et qu'au niveau 2, j'ai des balises <toto> et <titi> et <txxxx>. Est-ce qu'il existe un moyen de savoir:
a. combien de balises existent au niveau X (2 dans cet exemple)
b. combien de balises existent au niveau X qui ont comme nom "toto"

2. Est-ce qu'il existe un moyen avec ce lecteur de ne parcourir le fichier xml qu'à un certain niveau ?
Si j'ai par exemple des balises dont je veux lire les attributs et qu'elles sont toutes au niveau 7 et uniquement à ce niveau.

Pas sûr de m'être bien fait comprendre... ;(

Merci d'avance.
Posté le 09 juin 2023 - 10:20
Yoda a présenté l'énoncé suivant :
Bonsoir à tous,

J'ai quelques gros fichiers xlm à importer et je me suis dit que c'était
l'occasion de tester le lecteur xml.

L'import ne me pose pas de problème, même si je pense que je pourrais encore
l'optimiser.
Actuellement, je parcours tout le XML avec des indentations de POUR TOUT EN
PROFONDEUR Il y a 2-3 trucs que je n'ai pas trouvé comment les mettre en
place et qui me feraient gagner pas mal de temps lors de l'import.

1. est-ce qu'il y a un moyen (sans parcourir tout le fichier) de connaitre le
nombre d'élements d'un certain niveau ? Ou encore mieux, ceux dont le nom =
xxxxx
Admettons que j'ai un fichier xml avec 8 niveaux et qu'au niveau 2, j'ai des
balises <toto> et <titi> et <txxxx>. Est-ce qu'il existe un moyen de savoir:
a. combien de balises existent au niveau X (2 dans cet exemple)
b. combien de balises existent au niveau X qui ont comme nom "toto"

2. Est-ce qu'il existe un moyen avec ce lecteur de ne parcourir le fichier
xml qu'à un certain niveau ?
Si j'ai par exemple des balises dont je veux lire les attributs et qu'elles
sont toutes au niveau 7 et uniquement à ce niveau.

Pas sûr de m'être bien fait comprendre... ;(

Merci d'avance.


bonjour,

XMLExecuteXPath() est votre ami

--
Cordialement JeAn-PhI
Membre enregistré
168 messages
Popularité : +2 (2 votes)
Posté le 12 juin 2023 - 09:35
Merci, je vais regarder de ce côté là :merci:
Membre enregistré
168 messages
Popularité : +2 (2 votes)
Posté le 12 juin 2023 - 11:04
Bon, alors effectivement, XMLExecuteXPath() fait exactement ce que je recherche.

Mais, je perds l'avantage de XMLLecteur car ça charge tout le doc en mémoire... :/
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 12 juin 2023 - 11:11
Il est difficile de savoir combien d'items contient le fichier si tu n'as pas le fichier entier... :p

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
168 messages
Popularité : +2 (2 votes)
Posté le 13 juin 2023 - 14:37
Justement, si je charge le fichier en mémoire, je peux aussi compter (par exemple) le nombre de </pdv> avec un simple chaineoccurence par exemple. Pourtant, l'attribut ..occurence (qui au fond fait la même chose) du lecteur est bien pratique et fonctionne sans charger tout le fichier.

J'espérais une instruction/un attribut du même style que ..occurence, mais ou je pourrais préciser au lecteur soit le nom de balise dont je veux l'occurrence, soit la profondeur à laquelle rechercher.

Dans l'absolu, c'est même assez facilement faisable en code sans charger le fichier complet, mais ce n'est pas du tout performant (ou en tous cas, je n'ai pas su le faire de façon performante)

Je me disais que j'avais peut-être raté une instruction ou son utilisation (comme XMLExecuteXPath() que j'ai découverte grâce à JeAn-Phi.