indenter un code html par vba

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
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:

dysorthographie

XLDnaute Accro
Bonjour Patrick,
il faut utiliser les expressions régulières!

je suis moins compétant que toi sur le sujet mais je sais que tu peux également indenter le <Body,<Table,<TD,<TR etc...

j'avais un collègue qui mettait en forme des requêtes SQL avec indentation avec tabulation!
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour robert
je me suis dit si robert passe par par là je mange mon clavier ;) ;) ;)
les tagname importent peu
c'est les textnodes et fermetures de balises qui me posent problème

exemple avec ceci
<font> bonjour<em>robert</em></font>
j'arrive à (les traits d'unions représentent des espaces)
<font> bonjour
----<em>robert</em>
</font>


et je voudrais arriver à
<font>
---bonjour
//ceci est un textnode
----<em>robert</em>
</font>
 

Discussions similaires

Statistiques des forums

Discussions
312 095
Messages
2 085 250
Membres
102 837
dernier inscrit
CRETE