J'ai un code XML composé de 5 linges:
<maison>
<1eratage>
<salon><tapis><Dateachat>02022009</Dateachat><tapis><lieuachat>canapi</lieuachat></salon>
</1eretage>
</maison>
Pour le parcourir je le transforme en fichier texte et je le parcours ligne par ligne
Cependant je veux enlever des informations de ce XML, ici la partie en gras, pour pouvoir l'importer sous excel sans cette info.
Mon alfo consiste à parcourir lettre par lettre à partir de la ligne ou le début est <Salon>, mais ca ne marche pas:
Mon code est composé de plein de balise de ce type et je souhaite a chaque fois enlevé cette info, mais il ne marche pas, il ne traite pas la ligne en entier
Sub modifXMLLigneEtape2()
Dim CalculationTime As Single
CalculationTime = Timer
Dim TempLettre As String
Dim TempLigne As String
Dim TempFinMot As String
Dim TempLigneDelete As String
TempLigneDelete = "<Dateachat>"
Dim TempLigneDeleteFermeture As String
TempLigneDeleteFermeture = "</DateAchat>"
Dim TempSelectionDelete As String
Dim TempLigneSelectionAGarger As String
Open "h:\My Documents\Projet 3\essai.xml" For Input As #1
Open "h:\My Documents\Projet 3\Res_essai.xml" For Output Access Write As #2
Do While Not EOF(1)
Line Input #1, TempLigne
If Mid(TempLigne, 13, Len(TempLigneDelete)) = TempLigneDelete Then
z = "<salon><tapis><Dateachat>02022009</Dateachat><tapis><lieuachat>canapi</lieuachat></salon>"
If z Like "*<Dateachat>########</Dateachat>*" Then
z = Left(z, 14) & Right(z, Len(z) - 45)
End If
MsgBox z
Est ce possible de mettre un nombre Pas défini de #, c a d que l'interieur de mes balise ne fait pas tout le temps la meme taille, et il y a 10000 fois ce que j'ai mis mais avec des différences à l'intérieur.
Je peux me permettre de compter le début mais pas la fin.
Merci en tout cas
Une proposition en utilisant la référence à Microsoft xml Vx
Code:
Sub SupprimerDateAchat()
Dim xmlDoc As New MSXML2.DOMDocument30
Dim currNode As IXMLDOMElement
[COLOR=red]xmlDoc.loadXML ("<maison><etage niveau='1'><salon><tapis><Dateachat>02022009</Dateachat><lieuachat>canapi</lieuachat></tapis></salon></etage></maison>")
[/COLOR] Set currNode = xmlDoc.documentElement.getElementsByTagName("Dateachat").Item(0)
currNode.parentNode.removeChild currNode
End Sub
en remplaçant la ligne en rouge par xmlDoc.Load(NomCompletFichierXML)
le fichier doit contenir un xml bien formé. Ce que tu nous a donné comporte des erreurs.
Laquelle des deux ne marche pas?
Certainement ton xml est mal formé.
Pas nom de balise commençant par des chiffres (1eretage)
Dans ce que tu nous avais donné il y avait d'autres erreurs:
balise de fermeture de Tapis mal imbriquée etc.
A partir du moment où ton xml est bien formé, il n'y a pas de raison que cela ne marche pas. A moins que tes données soient plus complexes qu'il n'y parait.
Voila mon code, sachant que je souhaite un code qui marche pour cette ligne de facon générale, elle marcherait pour tout type de ligne avec n'importe quelle nombre de caractere a l'interieur de la balise expdate
Mon but est d'enlever tout ce quil y a dans les balises expdate et les balises expdate
Pour sousou, je veux bien les autres solutions stp
Sinon, si le XML n'est pas aux normes, il reste la solution de sousou
(en la mixant à la mienne qui était incomplète)
Code:
Line Input #1, phrase
if phrase like "*<Dateachat>*</Dateachat>*" then
deb = InStr(1, phrase, "<Dateachat")
fin = InStr(1, phrase, "/Dateachat>") + 11
phrase= Left(phrase, deb) & Right(phrase, Len(phrase) - fin)
end if
évidement, si les balises d'ouverture et de fermeture de Dateachat sont toujours sur la même ligne