Visualizando XSD's en VB.Net Fecha: 02/Dic/2004 (1 de Diciembre de 2004)
|
Introducci�n:
B�sicamente esta aplicaci�n permite ver archivos XSD en un formato similar al que muestra visual studio .net, obviamente es una versi�n beta que solo permite ver XSD sencillos, sin relaciones ni cosas muy complicadas, pero como base puede resultar muy �til.
Como Funciona.
Cuenta con dos user control, uno contenedor y otro para cada elemento.
El contenedor cuenta con dos formas de popular,
- "PopulateFromPath", a traves de un path al archivo ( como lo hace el ejemplo) -
- "PopulateFromString", asigandole el XSD como string
Ambos m�todos p�blicos luego llaman al m�todo privado "Populate". Para manejar mas f�cil el recorrido elimine del contenido del xsd los string "xs:", "<complexType>" y "</complexType>".
Populate:
Private Sub _Populate(ByVal oDom As System.Xml.XmlDocument) '------------------- Dim oNode As System.Xml.XmlElement Dim strXML As Stringx = 10 y = 10 '------------------- pnlContainer.Controls.Clear() '------------------- strXML = Replace(oDom.OuterXml, "xs:", "") strXML = Replace(strXML, "<complexType>", "") strXML = Replace(strXML, "</complexType>", "") oDom.LoadXml(strXML) For Each oNode In oDom.DocumentElement.ChildNodes FillDataSet(oNode) Next '------------------- Me.ParentForm.Text = " " & oDom.DocumentElement.ChildNodes(0).Attributes("name").InnerText End Sub
FillDataSet(Para dibujar cada grupo): Private Sub FillDataSet(ByVal oNode As Xml.XmlElement) Dim oNodeSec As System.Xml.XmlElement Dim oDs As New DataSet("Grupo") Dim strNombre As String If oNode.Name <> "choice" And oNode.Name <> "sequence" Then strNombre = oNode.Attributes("name").InnerText End If Dim oDt As New DataTable(strNombre) Dim oRow As DataRow Dim strTipo As String Dim strCaption As String Dim i As Integer Select Case oNode.Name Case "element" strCaption = "E: " & strNombre Case "group" strCaption = "G: " & strNombre Case "sequence" strCaption = "G: " & strNombre Case Else strCaption = "G: " & strNombre End Select oDs.Tables.Add(oDt) oDt.Columns.Add(" ") oDt.Columns.Add("Nombre") oDt.Columns.Add("TipoDato") If oNode.ChildNodes.Count > 0 Then For Each oNodeSec In oNode.ChildNodes oRow = oDt.NewRow Select Case UCase(oNodeSec.Name) '---------------------------- Case "ELEMENT" '---------------------------- strTipo = "E" If oNodeSec.ChildNodes.Count = 0 Then oRow.Item(0) = "E" oRow("Nombre") = oNodeSec.Attributes("name").InnerText If Not oNodeSec.Attributes("type") Is Nothing Then oRow("TipoDato") = oNodeSec.Attributes("type").InnerText End If oDt.Rows.Add(oRow) Else For i = 0 To oNodeSec.ChildNodes.Count - 1 oRow = oDt.NewRow oRow.Item(0) = "E" oRow("Nombre") = oNodeSec.ChildNodes(i).Attributes("name").InnerText oRow("TipoDato") = oNodeSec.ChildNodes(i).Attributes("type").InnerText oDt.Rows.Add(oRow) Next End If '---------------------------- Case "SEQUENCE" '---------------------------- strTipo = "S" For i = 0 To oNodeSec.ChildNodes.Count - 1 oRow = oDt.NewRow oRow.Item(0) = "E" oRow("Nombre") = oNodeSec.ChildNodes(i).Attributes("name").InnerText oRow("TipoDato") = oNodeSec.ChildNodes(i).Attributes("type").InnerText oDt.Rows.Add(oRow) Next 'FillDataSet(oNodeSec) '---------------------------- Case "CHOICE" '---------------------------- strTipo = "C" For i = 0 To oNodeSec.ChildNodes.Count - 1 FillDataSet(oNodeSec.ChildNodes(i)) Next Return '---------------------------- Case "GROUP" '---------------------------- strTipo = "G" FillDataSet(oNodeSec) Return '---------------------------- End Select Next Else oRow = oDt.NewRow oRow.Item(0) = "E" oRow("Nombre") = oNode.Attributes("name").InnerText oRow("TipoDato") = oNode.Attributes("type").InnerText oDt.Rows.Add(oRow) End If Dim oDg As New UC_XSDGroup oDg.FillDataSet2(oDs.Tables(0), strCaption) oDg.Location = New Drawing.Point(x, y) x += 25 y += 30 pnlContainer.Controls.Add(oDg) oDg.BringToFront() End Sub
El XSD del ejemplo se ve de la siguiente forma:
Fichero con el c�digo de ejemplo: cluque_XSDViewer.zip - Tama�o 18 KB