le 10-28-2016 05:08 AM
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:
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",...
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
Résolu ! Accéder à la solution.
10-28-2016 07:23 AM - modifié 10-28-2016 07:24 AM
le 10-28-2016 07:38 AM
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!
10-28-2016 07:59 AM - modifié 10-28-2016 08:06 AM
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 :
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,
le 10-28-2016 08:55 AM
10-28-2016 09:10 AM - modifié 10-28-2016 09:14 AM
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 !
le 10-28-2016 09:23 AM
le 10-31-2016 01:05 AM
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!