Предыстория вопроса viewtopic.php?f=2&t=43636#p6759402
FireFenix писал(а):Admiralisimys писал(а):На правах блиц вопроса: а для реализации обратной задачи (генерация HTML) существует удобный инструментарий?
System.XML.Serialization ?
Вот первые попытки
- Код: Выделить всё
Imports System
Imports System.IO
Imports System.Text
Imports System.Xml.Serialization
Imports System.Collections.Generic
Class GeneratorOfHTML
Private xmlser As New XmlSerializer(GetType(HtmlFile))
<STAThread()> Public Shared Sub Main()
Dim app As New GeneratorOfHTML()
End Sub
Sub New()
Dim hFileObj As New HtmlFile()
Dim hClass As New HtmlTag
hClass.HEAD = New hHead()
hClass.HEAD.TITLE = "Title of Hello World HTML Document Generated!"
hClass.BODY = New hBody()
hClass.BODY.H1 = "Hello World!"
Dim hTags As New System.Collections.Generic.List(Of HtmlTag)
hTags.Add(hClass)
hFileObj.HTML = hTags
ShowObjectCodeOnScreen(hFileObj)
'SaveObjectCode2File(hFileObj, "C:\1.html")
End Sub
Private Sub ShowObjectCodeOnScreen(ByVal o As Object)
Dim hCode As New StringBuilder()
Dim sw As New StringWriter(hCode)
xmlser.Serialize(sw, o)
sw.Close()
Console.WriteLine(hCode)
End Sub
Private Sub SaveObjectCode2File(ByVal o As Object, ByVal filepath As String)
Dim hCode As New StringBuilder()
Dim sw As New StreamWriter(filepath)
xmlser.Serialize(sw, o)
sw.Close()
End Sub
End Class
Public Class HtmlFile
Dim hTags As List(Of HtmlTag) = New List(Of HtmlTag)
Public Property HTML() As List(Of HtmlTag)
Get
Return hTags
End Get
Set(ByVal value As List(Of HtmlTag))
hTags = value
End Set
End Property
End Class
Public Class HtmlTag
Private hd As hHead
Private bd As hBody
Public Property HEAD() As hHead
Get
Return hd
End Get
Set(ByVal value As hHead)
hd = value
End Set
End Property
Public Property BODY() As hBody
Get
Return bd
End Get
Set(ByVal value As hBody)
bd = value
End Set
End Property
End Class
Public Class hHead
Private obj As Object
Public Property TITLE() As Object
Get
Return obj
End Get
Set(ByVal value As Object)
obj = value
End Set
End Property
End Class
Public Class hBody
Private obj As String
Public Property H1() As Object
Get
Return obj
End Get
Set(ByVal value As Object)
obj = value
End Set
End Property
End Class
Код сгенерированный программой
- Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<HtmlFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<HTML>
<HtmlTag>
<HEAD>
<TITLE xsi:type="xsd:string">Title of Hello World HTML Document Generated!</TITLE>
</HEAD>
<BODY>
<H1 xsi:type="xsd:string">Hello World!</H1>
</BODY>
</HtmlTag>
</HTML>
</HtmlFile>
Не совсем так как хотелось (этот код правильно отобразит даже IE6), но уже лучше (яснее) первоначального варианта с Console.WriteLine.
Хотелось уйти класса HtmlTag, от которого планировалось наследовать HEAD и BODY, но при этом варианте исключение на строчке xmlser.Serialize.
С таким подходом планировалось постепенное формирование документа, путём добавления конструкций в список. А в текущей реализации слишком много харкодинга и список не нужен.
Подскажите, где копнуть.