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("&nbsp;", " ")

   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

kick it on dotnet-kicks.de