1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
| Imports System.Xml
Imports System.Text
Imports System.IO
Public Class FormToCpcDos
Private doc As XmlDocument
Private WinToCpcControls As Dictionary(Of String, String)
Private CpcDebutToFins As Dictionary(Of String, String)
Private sb As StringBuilder
Private inputFile As String = "C:\Users\LEROY\Desktop\WinXMLToText" + "\Exemple.xml"
Private outputFile As String = "C:\Users\LEROY\Desktop\WinXMLToText" + "\Exemple.text"
Private Sub btnGenText_Click(sender As System.Object, e As System.EventArgs) Handles btnGenText.Click
sb = New StringBuilder
doc = New XmlDocument()
Dim cleandown As String = Nothing
Using sr As New StreamReader(inputFile)
cleandown = sr.ReadToEnd()
cleandown = "<DOCUMENT_ELEMENT>" + cleandown + "</DOCUMENT_ELEMENT>"
End Using
LoadWinToCpcControls()
doc = New XmlDocument()
doc.LoadXml(cleandown)
Dim root As XmlNode = doc.DocumentElement
For Each node As XmlNode In root.ChildNodes
WriteNodeObject(node, sb)
Next
TextBox1.Text = sb.ToString()
End Sub
Private Sub WriteNodeObject(currentNode As XmlNode, sbuilder As StringBuilder)
Dim nameTypes() As String = {}
Dim names() As String = {}
If currentNode.Name = "Object" Then ' c'est un node Object i.e. un Control
nameTypes = currentNode.Attributes.GetNamedItem("type").Value.Split(New Char() {","})
names = currentNode.Attributes.GetNamedItem("name").Value.Split(New Char() {","})
Select Case nameTypes(0)
Case WinToCpcControls.Keys(0)
sbuilder.Append(WinToCpcControls.Values(0))
sbuilder.Append(" " + names(0))
sbuilder.AppendLine()
'XPATH un autre operateut XML fait des miracles
'lit tou les nodes "Property" sous le currentNode
Dim childrops As XmlNodeList = currentNode.SelectNodes("Property")
For Each item As XmlNode In childrops
WriteNodeProperty(item, sbuilder)
Next
sbuilder.AppendLine(CpcDebutToFins.Values(0))
Case WinToCpcControls.Keys(1)
sbuilder.Append(WinToCpcControls.Values(1))
sbuilder.AppendLine(" " + names(0))
sbuilder.AppendLine()
Dim childrops As XmlNodeList = currentNode.SelectNodes("Property")
For Each item As XmlNode In childrops
WriteNodeProperty(item, sbuilder)
Next
sbuilder.AppendLine(CpcDebutToFins.Values(1))
Case WinToCpcControls.Keys(2)
sbuilder.Append(WinToCpcControls.Values(2))
sbuilder.Append(" " + names(0))
sbuilder.AppendLine()
Dim childrops As XmlNodeList = currentNode.SelectNodes("Property")
For Each item As XmlNode In childrops
WriteNodeProperty(item, sbuilder)
Next
sbuilder.AppendLine(CpcDebutToFins.Values(2))
Case WinToCpcControls.Keys(3)
sbuilder.Append(WinToCpcControls.Values(3))
sbuilder.Append(" " + names(0))
sbuilder.AppendLine()
Dim childrops As XmlNodeList = currentNode.SelectNodes("Property")
For Each item As XmlNode In childrops
WriteNodeProperty(item, sbuilder)
Next
sbuilder.AppendLine(CpcDebutToFins.Values(3))
Case WinToCpcControls.Keys(4)
sbuilder.Append(WinToCpcControls.Values(4))
sbuilder.Append(" " + names(0))
sbuilder.AppendLine()
Dim childrops As XmlNodeList = currentNode.SelectNodes("Property")
For Each item As XmlNode In childrops
WriteNodeProperty(item, sbuilder)
Next
sbuilder.AppendLine(CpcDebutToFins.Values(4))
Case WinToCpcControls.Keys(5)
sbuilder.Append(WinToCpcControls.Values(5))
sbuilder.Append(" " + names(0))
sbuilder.AppendLine()
Dim childrops As XmlNodeList = currentNode.SelectNodes("Property")
For Each item As XmlNode In childrops
WriteNodeProperty(item, sbuilder)
Next
sbuilder.AppendLine(CpcDebutToFins.Values(5))
End Select
sbuilder.AppendLine()
For Each itemNode In currentNode.ChildNodes
WriteNodeObject(itemNode, sbuilder) 'appel recurif car XML genere en fait un tree
Next
End If
End Sub
Private Sub WriteNodeProperty(currentNode As XmlNode, sbuilder As StringBuilder)
Dim name As String
Dim propertyValues() As String
propertyValues = currentNode.InnerText.Split(New Char() {","})
name = currentNode.Attributes.GetNamedItem("name").Value
If name = "Text" Then
sbuilder.AppendLine(".titre" + " " + " = """ + propertyValues(0) + """")
ElseIf name = "Location" Then
sbuilder.Append(".px" + " " + " = """ + propertyValues(0) + """")
sbuilder.AppendLine()
sbuilder.AppendLine(".py" + " " + " = """ + propertyValues(1) + """")
ElseIf name = "ClientSize" Or name = "Size" Then
sbuilder.Append(".tx" + " " + " = """ + propertyValues(0) + """")
sbuilder.AppendLine()
sbuilder.AppendLine(".ty" + " " + " = """ + propertyValues(1) + """")
ElseIf name = "BackColor" Then
Dim color As Color = color.FromName(propertyValues(0))
sbuilder.AppendLine(".CouleurFond" + " " + " = """ + color.R.ToString() + "," + color.G.ToString() + "," + color.B.ToString() + """")
ElseIf name = "ForeColor" Then
Dim color As Color = color.FromName(propertyValues(0))
Dim rgbcolors() As String = color.Name.Split(New Char() {","})
sbuilder.AppendLine(".CouleurTexte" + " " + " = """ + color.R.ToString() + "," + color.G.ToString() + "," + color.B.ToString() + """")
ElseIf name = "Checked" Then
Dim valeur As String = If(propertyValues(0) = "Checked", "1", "0")
sbuilder.AppendLine(".valeur" + " " + " = """ + valeur + """")
End If
End Sub
Private Sub btnSaveAsText_Click(sender As System.Object, e As System.EventArgs) Handles btnSaveAsText.Click
If sb IsNot Nothing Then
File.WriteAllText(outputFile, sb.ToString)
End If
End Sub
Private Sub LoadWinToCpcControls()
WinToCpcControls = New Dictionary(Of String, String)
WinToCpcControls.Add("System.Windows.Forms.Form", "Window/")
WinToCpcControls.Add("System.Windows.Forms.PictureBox", "picturebox/")
WinToCpcControls.Add("System.Windows.Forms.CheckBox", "checkbox/")
WinToCpcControls.Add("System.Windows.Forms.Button", "button/")
WinToCpcControls.Add("System.Windows.Forms.TextBox", "textebox/")
WinToCpcControls.Add("System.Windows.Forms.Label", "textblock/")
CpcDebutToFins = New Dictionary(Of String, String)
CpcDebutToFins.Add("window/", "fin/ window")
CpcDebutToFins.Add("picturebox/", "fin/ picturebox")
CpcDebutToFins.Add("checkbox/", "fin/ checkbox")
CpcDebutToFins.Add("button/", "fin/ button")
CpcDebutToFins.Add("textebox/", "fin/ textbox")
CpcDebutToFins.Add("textblock/", "fin/ textblock")
End Sub
End Class |