2017-07-21 3 views
2

Je génère un rapport qui extrait des informations d'un fichier XML. Fondamentalement, ce que j'ai fait jusqu'ici est mis en place une expression XPath qui liste les périphériques distincts. Il existe trois périphériques dans le fichier XML ci-dessus (A, B et C). Voici l'expression XPath. Je suis limité à XPath 1.0, sinon j'utiliserais la fonction distinct-values ​​(). Ensuite, ce que je voudrais faire est de renvoyer le nombre de périphériques répertoriés dans la première expression XPath. Par exemple, le code XML en haut me donner les chefs d'accusation suivants:XPath 1.0: Liste des valeurs distinctes avec le nombre de leurs occurrences

A: 3
B: 2
C: 2

Est-il possible de retourner les noms et compte en une seule expression ? Si ce n'est pas le cas, existe-t-il une expression XPath qui renvoie uniquement les comptes de chacun des périphériques distincts. Je ne saurai jamais combien de périphériques distincts figurent dans le rapport ou quelles sont les valeurs de l'élément Device. Par conséquent, je ne peux pas simplement écrire des fonctions count() pour un nom de périphérique particulier.

Merci d'avance!

+0

Dans quel environnement exécutez-vous cette XPath 1.0? –

+0

@ThomasW, je l'utiliserai comme SmartName dans Automation Engine d'Esko. –

+0

Je n'ai eu qu'un coup d'oeil rapide sur la documentation, mais il me semble que vous pourriez utiliser un Script SmartName. Vous ne savez pas si les requêtes XPath sont prises en charge dans le moteur JavaScript d'Esko, mais vous pouvez toujours parcourir le document en utilisant JavaScript lui-même. –

Répondre

1

Si vous êtes limité à XPath 1.0, cela n'est pas possible avec une seule requête. Vous auriez besoin d'un processus en deux étapes. Si vous exécutez ces requêtes par programme, utilisez le langage de programmation correspondant (XSLT, PHP, JavaScript) pour déclencher des requêtes de comptage basées sur les résultats de la première requête.

count(/JoinedRoot/FlexoPlateReport/Device[.='A'])