Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Manipuler les données XML à partir d'Excel

  • Initiateur de la discussion Initiateur de la discussion Loulou27
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Loulou27

XLDnaute Nouveau
Bonjour,

Voilà mon sujet :
Je souhaite à partir d'excel lire les données dans un fichier XML

De ce que je comprends, le xml est potentiellement comme des répertoires => copie par un logiciel pour comprendre la structure car je n'ai aucune connaissance au sujet des xml



Ce que j'ai en tête, c'est en partant de cette référence "OR-xxxxx" (rechercher par le biais d'une feuille excel), je remonte dans le "répertoire parent" VddEcu pour ensuite rechercher d'autres référence dans les autres "sous-répertoires" pour les vérifier

J'espère avoir été compréhensif !!!

Merci pour votre aide / retour


N.B : bien sûr, j'arrive à remettre au excel le fichier xml mais cela n'est pas très pratique pour travailler dessus et je pense que le mieux est de rester en xml

Je pense que le format du fichier xml n'est pas conforme mais je ne peux pas le modifier car il vient d'un outil que j'utilise



Si je modifie l'entête du xml, j'ai du mieux

avant :
<VddDiagProjects xmlns="http://......" xmlns:xsd="http://....." xmlns:xsi="http://....." xsi:schemaLocation="http://..... http://..... http://..... >

après :
<VddDiagProjects>

Dois-je donc passer par un fichier temporaire qui prendrai le xml souhaité pour l'enregistrer dans le même format avec l'entête modifié ou y'a-t-il une astuce ?
 
Dernière édition:
Bonjour,

J'avais déjà essayé et je viens de le refaire mais cela me donne tous les 'ODX 2.0.1' de tous les VddEcu et non juste ceux dans le VddEcu dans lequel je suis


Pourtant, je suis bien dans un VddEcu et non plus haut dans le schéma xml
Set nodes = xml.SelectNodes("//ns:VddEcu")

For Each node In nodes

Set ODX = node.SelectNodes("//ns:vddDiagSpecifications/ns:VddDiagSpecification/ns:VddArticle/ns:vddFiles/ns:VddFile[ns:typeFile='ODX 2.0.1']")

Cela me ressort 98 et non 4 comme cela devrait
 
Salut,
Cela correspond à quoi 98 et 4 dans le fichier xml de test ? à quelle ligne ?
Nullosse
A rien car comme il n'est pas complet; 98 et 4 c'est avec le fichier complet

mais si tu fais avec le fichier test, tu dois avoir 1 à chaque VddEcu

Set ODX = node.SelectNodes("ns:vddDiagSpecifications/ns:VddDiagSpecification/ns:VddArticle/ns:vddFiles/ns:VddFile[ns:typeFile='ODX 2.0.1']")
==> 1


Set ODX = node.SelectNodes("//ns:vddDiagSpecifications/ns:VddDiagSpecification/ns:VddArticle/ns:vddFiles/ns:VddFile[ns:typeFile='ODX 2.0.1']")
==> 3


Cela fonctionne si on ne mets pas les "//" donc pas besoin de se prendre la tête ;-)


Ce que je voulais savoir c'était si il était possible de faire un noeud à partir d'un noeud comme je pensais
Set mess_node = node.SelectNodes("ns:vddDiagSpecifications/ns:VddDiagSpecification")
Set ODX = mess_node.SelectNodes("ns:VddArticle/ns:vddFiles/ns:VddFile[ns:typeFile='ODX 2.0.1']")
 
VB:
Sub LireVddDiagProjects()
    Dim xml As Object                ' MSXML2.DOMDocument60
    Dim nodes As Object              ' IXMLDOMNodeList
    Dim node As Object               ' IXMLDOMNode
    Dim mess_node As Object               ' IXMLDOMNode
    '--- Création du DOM (late binding)
    Set xml = CreateObject("MSXML2.DOMDocument.6.0")
    xml.async = False
    xml.validateOnParse = False
    '--- Charger le fichier XML
    If Not xml.Load("D:\Temp\P64_EUROPE_CONF_17_33 - light.xml") Then
        MsgBox "Erreur de chargement du XML"
        Exit Sub
    End If
    '--- Déclarer le namespace (méthode correcte MSXML)
    xml.SetProperty "SelectionNamespaces", _
        "xmlns:ns='http://example.com/vdddiag/projects'"   ' <-- adapte l’URL
    '--- Récupérer tous les nœuds OR
    Set nodes = xml.SelectNodes("//ns:VddEcu")
    If nodes.Length = 0 Then
        MsgBox "Aucun nœud trouvé. Vérifie le namespace."
        Exit Sub
    End If
    '--- Parcours des noeuds
    For Each node In nodes
        Debug.Print "Label VddEcu : ", node.SelectSingleNode("ns:label").Text
        Set mess_node = node.SelectSingleNode(".//ns:vddDiagSpecifications/ns:VddDiagSpecification/ns:VddArticle/ns:vddFiles/ns:VddFile[ns:typeFile='ODX 2.0.1']/ns:fileName")
        If Not mess_node Is Nothing Then Debug.Print "Fichier Diag : ", mess_node.Text
        Debug.Print "============================================="
    Next node
   ' MsgBox "Lecture terminée"
End Sub

.// = recherche récursive à partir de ce nœud, pas depuis la racine

Résultat :
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…