peug
Messages postés232Date d'inscriptionmercredi 25 octobre 2000StatutMembreDernière intervention 5 octobre 2012
-
7 juil. 2009 à 19:03
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
8 juil. 2009 à 14:40
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...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 8 juil. 2009 à 08:04
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
peug
Messages postés232Date d'inscriptionmercredi 25 octobre 2000StatutMembreDernière intervention 5 octobre 2012 8 juil. 2009 à 07:27
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 !
Vous n’avez pas trouvé la réponse que vous recherchez ?
peug
Messages postés232Date d'inscriptionmercredi 25 octobre 2000StatutMembreDernière intervention 5 octobre 2012 8 juil. 2009 à 08:10
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 ;)
peug
Messages postés232Date d'inscriptionmercredi 25 octobre 2000StatutMembreDernière intervention 5 octobre 2012 8 juil. 2009 à 09:29
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 ?
peug
Messages postés232Date d'inscriptionmercredi 25 octobre 2000StatutMembreDernière intervention 5 octobre 2012 8 juil. 2009 à 10:31
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