Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Utilisation du Parser xml

Résolu !
Accéder à la solution

Bonjour à tous,

 

Petit problème de vendredi... je suis en train d'essayer d'extraire des infos d'un fichier xml, en me basant sur l'exemple "Load XML with Parser API.vi" (LabVIEW 2015 SP1). J'ai bien compris le fonctionnement du vi avec le fichier xml fournit avec l'exemple (TestConfiguration.xml), mais bien évidemment dans mon exemple cela ne marche pas... Mon ficher à cette allure:Capture.JPG

 

Je cherche donc à lire les infos du noeud "parameters", et pour chaque "parameter", créer un cluster avec les différents champs. Mais tout ce que j'arrive à lire, c'est un tableau vide... J'espérais récupérer la chaine complète, ou un tableau de référence qui me permettrait de lire les valeurs "name", "access", "value", "index",...

 

xml.png

 

Je dois certainement mal m'y prendre... Quelqu'un aurait-il une idée?? Je joins mon fichier xml (convertit en txt, sinon bloqué par le site...).

 

Merci d'avance pour votre aide

Francis M
0 Compliments
Message 1 sur 8
5 391 Visites

Salut,

 

Je ne sais pas si ça peut résoudre ton problème mais il n'y a pas d'entête dans le xml (type  <?xml version="1.0" encoding="UTF-8"?>).

 

A+

Cordialement,

Julien V.

[FIRST]

[LabVIEW Programming]


[FIRST]

0 Compliments
Message 2 sur 8
5 374 Visites

Effectivement... c'est un fichier utilisé par un autre SW, je dois l'utiliser tel quel. Mais à priori ce n'est pas ça qui est bloquant, c'est juste une information supplémentaire dont je n'a ipas besoin. Merci quand même!

Francis M
0 Compliments
Message 3 sur 8
5 370 Visites

Bonjour,

 

La fonction Get Node Text Content permet de récupérer le texte compris entre une balise ouvrante et une balise fermante :

 

<balise attribut1="valeurAttribut1" attribut2="valeurAttribut2">TextContent</balise>

Dans le cas qui nous intéresse, il n'y a pas de valeur entre deux balise (les noeud parameter sont "auto-fermant" i.e. <balise />). Qui plus est, il me semble que ce sont les attributs du noeud parameter qui doivent être récupérés. Voici un snippet qui illustre une solution :

 

XMLParsing.png

 

J'y utilise un XPath, qui me permet de récupérer la liste des noeud parameter dans le fichier XML (même fonctionnalité que le Get Element By Tag Name, mais permet d'aller plus loin). Une fois la liste des noeuds parameter récupérée, on boucle dessus. Pour chacun, on vient récupérer la liste des attributs, la basculer sous la forme d'un tableau de noeuds, et par propriété, lire le nom et la valeur de l'attribut (attribut1 et valeurAttribut1 dans l'exemple de XML ci-dessus).

 

La structure case permet, dans mon exemple, d'orienter les attributs vers différents champs d'un cluster parameter, avant de constituer un tableau, en sortie de boucle.

 

Au passage, si vous ne conaissez pas les XPath, je vous invite vivement à passer un peu de temps dessus : il y a là un mécanisme de requête sur le contenu de fichiers XML, particulièrement puissant.

 

Cordialement,

Message 4 sur 8
5 368 Visites

Je m'orientais sur les Xpath aussi, et Mathieu est allé plus vite que moi !

 

D'ailleurs, pourquoi avoir mis "//parameter" plutôt que "parameter". Quand je teste je vois bien que sans ça ne marche pas, ou alors il faut déjà avoir la référence du noeuf "paramaters".

Cordialement,

Julien V.

[FIRST]

[LabVIEW Programming]


[FIRST]

0 Compliments
Message 5 sur 8
5 357 Visites
Solution
Accepté par Desruelle_luc

La requète qui commence par //nodeName permet de récupérer n'importe quel élément nodeName, quel que soit son emplacement dans le document. On aurait pu être plus précis, en disant //parameters/parameter, pour récupérer explicitement les noeuds parameter présent sous un noeud parameters, ce noeud parameters pouvant être n'importe où dans le document.

 

Il est également possible de récupérer des attributs : //parameter/@access permet de récupérer tout les attributs access des noeuds parameter.

 

On peut aller encore plus loin en conditionnant une requête sur la valeur d'un attribut. Ci-après, je récupère les noeuds parameter dont la valeur de l'attribut access est 0x001//parameter[@access="0x001"]

 

Ceci n'est qu'un apperçu, les possibilités sont innombrables. On trouve pas mal de littérature sur le sujet sur le net... à vous de jouer !

Message 6 sur 8
5 349 Visites

Merci !

Cordialement,

Julien V.

[FIRST]

[LabVIEW Programming]


[FIRST]

0 Compliments
Message 7 sur 8
5 342 Visites

Merci à tous les 2 pour votre aide! Je ne connaissais pas les XPath, je vais creuser un peu... En tous cas ça résoud parfaitement mon problème, et ça me fera gagner un temps précieux la prochaine fois!

Francis M
0 Compliments
Message 8 sur 8
5 284 Visites