Beim Entwickeln einer Webplattform macht man ja gerne den einen oderanderen HTML Fehler.
Auch wenn mir das immer seltener passiert, ist es dennoch schön wenn man gleich Probleme mittels Holzhammermethode mitgeteilt bekommt.
Bekanntlich kann man in Page Render den HTML-Code abgreifen.
Wenn man daraus ein XElement generieren kann, ist der Code zumindest schon mal valiedes XML.
Wenn dies nicht funktioniert lasse ich mir die Fehlemeldung ausgeben und kann de Fhler gleich korrigieren.
Kleiner Nebeneffekt:
Der HTML-Code ist absolut perfekt eingerückt und die Struktur klar ersichtlich, auch wenn man viele Usercontrols zusammensteckt.
Ob man dies in einer Live-Website einsetzt ist sicherlich fraglich.
1
2 Partial Class _Default
3 Inherits System.Web.UI.Page
4
5
6
7 Protected Overrides Sub Render(ByVal output As HtmlTextWriter)
8
9 Dim sb As StringBuilder = New StringBuilder
10 Dim sw As IO.StringWriter = New IO.StringWriter(sb)
11 Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)
12
13 MyBase.Render(htw)
14
15 Dim PageHTML As String = sb.ToString().Replace("<br>", "<br/>")
16
17
18 Try
19 'Bei UpdatePanelanfragen ist kein <body im Code.
20 'Diese Anfragen wollen wir nicht verändern
21 If PageHTML.Contains("<body>") Or PageHTML.Contains("<body ") Then
22
23 PageHTML = PageHTML.Replace("<script>", _
"<script type=""text/javascript"">")
24 PageHTML = PageHTML.Replace("><", "> <").Replace(" ", " ")
25
26 'xElement erstellen:
27 Dim x As XElement = XElement.Parse(PageHTML)
28
29 Dim xString = x.ToString.Replace(vbCr, vbLf).Replace(vbCrLf, vbLf)
30
31 While xString.Contains(vbLf & vbLf)
32 xString = xString.Replace(vbLf & vbLf, vbLf)
33 End While
34
35 'Der Doctype wird im XElement entfernt... also neu hinzufügen
36 Dim Header = "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.1//EN""" & _
37 " ""http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"">"
38 output.Write(Header & vbCrLf & xString)
39 Exit Sub
40 Else
41 'Bei UpdatePanelanfragen ist kein <body im Code.
42 'Diese Anfragen werden unverändert zurückgegeben
43 output.Write(PageHTML.ToString)
44 Exit Sub
45 End If
46 Catch ex As Exception
47 '################### Hier schlägt der Holzhammer zu!
48 Response.Write(ex.Message)
49 output.Write(PageHTML.ToString)
50 End Try
51
52 End Sub
53 End Class
