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