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: