Bonsoir,
J'essai de lire un fichier XML du type :
<?xml version= "1.0" encoding="UTF-8" standalone= "yes"?>
http://schemas.microsoft.com/project">
<Tasks>
<Task>
0
0
<Name>PHASE 1</Name>
</Task>
<Task>
1 1 <Name>PHASE 2</Name>
</Task>
<Task>
etc...
comme ceci
Dim xmlFic As MSXML2.DOMDocument60
Set xmlFic = New MSXML2.DOMDocument60
xmlFic.async = False
If xmlFic.Load("fichierXML") Then
Dim xTitles As MSXML2.IXMLDOMElement
Dim xTitle As MSXML2.IXMLDOMElement
For Each xTitles In xmlFic.getElementsByTagName("Tasks")
For Each xTitle In xTitles.getElementsByTagName("Task")
For j = 0 To xTitle.childNodes.Length - 1
Select Case UCase(xTitle.childNodes.Item(j).baseName)
Case "ID"
$ID = xTitle.childNodes.Item(j).text
Case "NAME"
$Nom = xTitle.childNodes.Item(j).text
end select
next
next
et bien cela fonctionne à la condition que la ligne du XML http://schemas.microsoft.com/project"> soit ! si il y a le xmlns=... ca marche point...
plus propre ainsi (et fonctionne même avec le namespace) :
Dim oXml As DOMDocument
Dim oTask As IXMLDOMNode
Dim oNode As IXMLDOMNode
Dim sNom As String
Dim sID As String
Set oXml = New DOMDocument
oXml.async = False
If oXml.Load("c:\a.xml") Then
For Each oTask In oXml.selectNodes("Project/Tasks/Task")
Set oNode = oTask.selectSingleNode("ID")
If Not Nothing Is oNode Then
sID = oNode.Text
End If
Set oNode = oTask.selectSingleNode("Name")
If Not Nothing Is oNode Then
sNom = oNode.Text
End If
Alors c'est causé spécificiquement à cause du mot "xmlns=". Le contenu des parenthèses de xmlns n'y fait rien. Si à la place de "xmlns=" je met "aaaa=" ça marche !
Ben écoute merci car je viens encore de chercher dans tous les coins de la planète et nada. J'ai vu que je n'étais pas le seul à poser la question sur différent forum sans aucune solution
L' XML est un arbre qui cache une forêt avec ces XSD, Namespace et compagnies
Merci beaucoup pour ton aide; Je vais donc recodé proprement mon cafouilli ;)
Ok dorénavant je me base sur ta source.
Mais une question, j'ai évidement fait référence à Microsoft XMLv6.0
sur la déclaration Dim oXml As DOMDocument , moi j'avais pioché Dim oXml As DOMDocument60 vu qu'il y a le choix et bien avec Dim oXml As DOMDocument60 ça ne fonctionne pas. Bon j'ai donc laissé sans mais on utilise qd même la version 6 de l'objet microsoft ?
avant ta solution, j'ai pensé à virer ce namesspace, pas propre mais c'était une idée.
Mais idem... Vas-y voir pour ignorer ce namespace. La seule chose que j'ai imaginé était de lire le XML avant via OPEN... CLOSE et de faire le traitement. Mais ca faisait une bidouille vraiment pas propre
Pour lire SaveSersion pourquoi ça ne passe pas ? :
Set xNoeud = xmlFic.selectSingleNode("Project")
Set oNode = xNoeud.selectSingleNode("SaveVersion")
debug.print oNode.text