Pages

Building Hierarchical Xml Data using DataSet

Building a xml string in Hierarchical manner using the sql query. The BuildMap method of SiteMapBuilder class accepts dataset, identity column and refering colum and key value as a parameters and retuns the xml. the dataset contains the datatable will two columns, with one column refering the another column. no relation should be created explicitly. the data in the table should have a relation.

the class is listed below.


Imports Microsoft.VisualBasic
Imports System.Xml
Imports System.Data

Public Class HierarchicalXMLDataBuilder

Private ParentColumn As String
Private ChildColumn As String
Private NoOfColumns As Integer
Private Data As DataSet
Private vuData As DataView

Public Function BuildMap(ByVal data As DataSet, ByVal IdentityColumn As String, ByVal ReferenceColumn As String, ByVal KeyValue As String) As String
Me.ParentColumn = IdentityColumn
Me.ChildColumn = ReferenceColumn
Me.Data = data
vuData = New DataView(data.Tables(0))
NoOfColumns = data.Tables(0).Columns.Count
Dim xml As String
xml = BuildChildNodes(vuData, ParentColumn & " = " & KeyValue)
Return xml
End Function

Private Function BuildChildNodes(ByVal vu As DataView, ByVal filter As String) As String
Dim nodeBuilder As New StringBuilder(String.Empty)
vu.RowFilter = filter
Dim RowCounter As Integer = 0
For RowCounter = 0 To vu.Count - 1
nodeBuilder.Append("<Node")
Dim ColCounter As Integer = 0
For ColCounter = 0 To NoOfColumns - 1
nodeBuilder.Append(" ")
nodeBuilder.Append(Data.Tables(0).Columns(ColCounter).ColumnName)
nodeBuilder.Append(" = """)
nodeBuilder.Append(vu.Item(RowCounter)(ColCounter).ToString())
nodeBuilder.Append(""" ")
Next
nodeBuilder.Append(" >")
Dim vuData2 As New DataView(data.Tables(0))
If vu.Count > RowCounter Then
nodeBuilder.Append(BuildChildNodes(vuData2, ChildColumn & " = " & vu.Item(RowCounter)(ParentColumn)))
End If
nodeBuilder.Append("</Node>")
Next
Return nodeBuilder.ToString()
End Function
End Class

the BUilder class can be used this way, and can be binded with treeview or to a menu control.

Dim XmlData As New SiteMapBuilder
Dim XmlString As String = XmlData.BuildMap(ds, "RowId", "ParentID", 1)
Dim doc As New System.Xml.XmlDocument()
doc.LoadXml(XmlString)
doc.Save(Server.MapPath("xmlfile.xml"))

1 comment:

  1. Oi, achei seu blog pelo google está bem interessante gostei desse post. Gostaria de falar sobre o CresceNet. O CresceNet é um provedor de internet discada que remunera seus usuários pelo tempo conectado. Exatamente isso que você leu, estão pagando para você conectar. O provedor paga 20 centavos por hora de conexão discada com ligação local para mais de 2100 cidades do Brasil. O CresceNet tem um acelerador de conexão, que deixa sua conexão até 10 vezes mais rápida. Quem utiliza banda larga pode lucrar também, basta se cadastrar no CresceNet e quando for dormir conectar por discada, é possível pagar a ADSL só com o dinheiro da discada. Nos horários de minuto único o gasto com telefone é mínimo e a remuneração do CresceNet generosa. Se você quiser linkar o Cresce.Net(www.provedorcrescenet.com) no seu blog eu ficaria agradecido, até mais e sucesso. (If he will be possible add the CresceNet(www.provedorcrescenet.com) in your blogroll I thankful, bye friend).

    ReplyDelete