patricktoulon
XLDnaute Barbatruc
bonjour a tous
je cherche a créer un indenteur de code html et ça fait longtemps que je cherche
j'ai du mal avec les textnodes et/ou les fermeture de balise
si vous avez des idées je suis preneur
le model1
l'ai un soucis pour indenter les textnodes
le model2
pareil je ne sais pas comment aligner les textnodes et les fermetures de balise
je cherche a créer un indenteur de code html et ça fait longtemps que je cherche
j'ai du mal avec les textnodes et/ou les fermeture de balise
si vous avez des idées je suis preneur
le model1
l'ai un soucis pour indenter les textnodes
VB:
Option Explicit
Sub test()
Dim code$, i&, elem As Object, t, x&
code = "<html><body><div><font color=red>toto<B>la <em>grosse</em> fritte</b></font><font><S>toto</s><B>la grosse anguille</b></font></div></body></html>"
With CreateObject("htmlfile")
.body.innerhtml = code
For Each elem In .body.all: elem.setattribute "esp", 0: Next: code = .body.innerhtml ' on donne l'attribut esp =1 a tout!!!! les elements(c'est provisoire!!!)
'maintenant on modifie cet attribut en fonction du parentelement de chaque elements+5 par rapport a son parent direct
For Each elem In .body.all
If i >= 1 Then elem.setattribute "esp", Val(elem.parentelement.getattribute("esp")) + 5
i = i + 1
Next
code = .body.innerhtml
For Each elem In .body.all
code = Replace(code, "</" & elem.tagname & ">", "</" & elem.tagname & " esp=""" & elem.getattribute("esp") & """>")
Next ' on inscrit aussi l'attribut esp adans toutes !!!! les fermetures de balise elements(c'est provisoire!!!)
code = Replace(code, "<", vbCrLf & "<")
End With
MsgBox "element avec attribut nombre de tab " & vbCrLf & code 'voir le code avec les attribut
t = Split(code, vbCrLf)
For i = LBound(t) To UBound(t)
If InStr(t(i), "esp") > 0 Then
x = Val(Split(t(i), "esp=""")(1))
t(i) = String(x, " ") & t(i)
End If
Next
code = Join(t, vbCrLf)
For i = 0 To 10000
If InStr(1, code, "esp=""", vbTextCompare) > 0 Then code = Replace(code, "esp=""" & i & Chr(34), "") else exit for
Next
MsgBox "code indenté" & vbCrLf & Replace(code, " >", ">")
End Sub
le model2
pareil je ne sais pas comment aligner les textnodes et les fermetures de balise
VB:
Option Explicit
Sub test2()
Dim code, i&, x&, elem As Object, t
code = "<html><body><div><font color=red>toto<B>la <em>grosse</em> fritte</b></font><font><S>toto</s><B>la frosse anguille</b></font></div></body></html>"
With CreateObject("htmlfile")
.body.innerhtml = code
For Each elem In .body.all: elem.setattribute "esp", 0: Next: code = .body.innerhtml ' on donne l'attribut esp =1 a tout!!!! les elements(c'est provisoire!!!)
'maintenant on modifie cet attribut en fonction du parentelement de chaque elements+2 par rapport a son parent directe
For Each elem In .body.all
If i >= 1 Then elem.setattribute "esp", Val(elem.parentelement.getattribute("esp")) + 5
i = i + 1
Next
code = .body.innerhtml
For Each elem In .body.all
code = Replace(code, elem.outerhtml, vbCrLf & elem.outerhtml)
Next ' on donne l'attribut esp =1 a tout!!!! les elements(c'est provisoire!!!)
code = Replace(code, "><", ">" & vbCrLf & "<")
End With
MsgBox "element avec attribut nombre de tab " & vbCrLf & code
t = Split(code, vbCrLf)
For i = LBound(t) To UBound(t)
If InStr(t(i), "esp") > 0 Then
x = Val(Split(t(i), "esp=""")(1))
t(i) = String(x, " ") & t(i)
End If
Next
code = Join(t, vbCrLf)
For i = 0 To 10000
If InStr(1, code, "esp=""", vbTextCompare) > 0 Then code = Replace(code, "esp=""" & i & Chr(34), "")
Next
MsgBox "code indenté" & vbCrLf & code
End Sub
Dernière édition: