<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mios.com/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mios.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mysticjay</id>
		<title>MiOS - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mios.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mysticjay"/>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Special:Contributions/Mysticjay"/>
		<updated>2026-04-08T11:07:55Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.8</generator>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-27T01:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 48tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Nested tables like Devices have states and ControlURLs - these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Using the functions below, a small .NET web app that shows Rooms/Scenes/Devices (Code for that below)   - Also see the forum post:&lt;br /&gt;
&lt;br /&gt;
http://forum.micasaverde.com/index.php?topic=7950.0 [http://forum.micasaverde.com/index.php?topic=7950.0]&lt;br /&gt;
&lt;br /&gt;
Public Class _Default&lt;br /&gt;
    Inherits System.Web.UI.Page&lt;br /&gt;
&lt;br /&gt;
    Dim UserDataset As DataSet&lt;br /&gt;
    Dim ud As UserData&lt;br /&gt;
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load&lt;br /&gt;
        If Not Page.IsPostBack Then&lt;br /&gt;
            If Session(&amp;quot;UserData&amp;quot;) Is Nothing Then&lt;br /&gt;
                ud = New UserData&lt;br /&gt;
                Session(&amp;quot;UserData&amp;quot;) = ud.Parse_UserData_To_DataSet(&amp;quot;d:\test&amp;quot;)&lt;br /&gt;
            End If&lt;br /&gt;
        End If&lt;br /&gt;
        UserDataset = Session(&amp;quot;UserData&amp;quot;)&lt;br /&gt;
        GetData()&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Sub GetData()&lt;br /&gt;
        Dim RoomsTable As DataTable = UserDataset.Tables(&amp;quot;rooms&amp;quot;)&lt;br /&gt;
        Me.RoomsGrid.DataSource = RoomsTable&lt;br /&gt;
        Me.RoomsGrid.DataBind()&lt;br /&gt;
        RoomsGrid.ShowHeader = False&lt;br /&gt;
        Dim ScenesTable As DataTable = UserDataset.Tables(&amp;quot;scenes&amp;quot;)&lt;br /&gt;
        Me.ScenesGrid.DataSource = ScenesTable&lt;br /&gt;
        Me.ScenesGrid.DataBind()&lt;br /&gt;
        ScenesGrid.ShowHeader = False&lt;br /&gt;
        Dim DevicesTable As DataTable = UserDataset.Tables(&amp;quot;devices&amp;quot;)&lt;br /&gt;
        Dim drRemove As DataRow() = DevicesTable.Select(&amp;quot;invisible=1&amp;quot;)&lt;br /&gt;
        For Each dr As DataRow In drRemove&lt;br /&gt;
            DevicesTable.Rows.Remove(dr)&lt;br /&gt;
        Next&lt;br /&gt;
        Me.DevicesGrid.DataSource = DevicesTable&lt;br /&gt;
        Me.DevicesGrid.DataBind()&lt;br /&gt;
        DevicesGrid.ShowHeader = False&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
So, This is more like it!!!&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Dim masterDs As New DataSet&lt;br /&gt;
&lt;br /&gt;
    Sub Parse_UserData_To_DataSet(ByVal OutputFolder As String, _&lt;br /&gt;
                                          Optional ByVal veraURL As String = &amp;quot;http://myhome:49451&amp;quot;)&lt;br /&gt;
        'Parse XML and create XML files to load in to dataset directly&lt;br /&gt;
        Dim settings As New XmlReaderSettings()&lt;br /&gt;
        settings.DtdProcessing = DtdProcessing.Parse&lt;br /&gt;
        Dim reader As XmlReader = XmlReader.Create(veraURL &amp;amp; &amp;quot;/data_request?output_format=xml&amp;amp;id=user_data&amp;quot;, settings)&lt;br /&gt;
        Dim doc As New XmlDocument()&lt;br /&gt;
        doc.Load(reader)&lt;br /&gt;
        Dim root As XmlNode = doc.DocumentElement&lt;br /&gt;
        Dim ParseNodeEnum As IEnumerator = root.GetEnumerator&lt;br /&gt;
        While (ParseNodeEnum.MoveNext)&lt;br /&gt;
            Dim NodeRow As XmlNode = ParseNodeEnum.Current&lt;br /&gt;
            ParseElements(NodeRow, Nothing)&lt;br /&gt;
        End While&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Sub ParseElements(ByVal ParseNode As XmlNode, ByVal ParentRow As DataRow)&lt;br /&gt;
        Dim dt As DataTable = CreateTable(ParseNode, ParentRow)&lt;br /&gt;
        Dim ParseNodeEnum As IEnumerator = ParseNode.GetEnumerator&lt;br /&gt;
        While (ParseNodeEnum.MoveNext)&lt;br /&gt;
            Dim NodeRow As XmlNode = ParseNodeEnum.Current&lt;br /&gt;
            Dim dr As DataRow = dt.NewRow&lt;br /&gt;
            'Add Attributes as columns to Datatable&lt;br /&gt;
            Dim ienum As IEnumerator = NodeRow.Attributes.GetEnumerator()&lt;br /&gt;
            While ienum.MoveNext&lt;br /&gt;
                Dim atr As XmlAttribute = ienum.Current&lt;br /&gt;
                If dt.Columns.Contains(atr.Name) = False Then dt.Columns.Add(atr.Name)&lt;br /&gt;
                dr(atr.Name) = atr.Value&lt;br /&gt;
            End While&lt;br /&gt;
            If Not IsNothing(ParentRow) Then&lt;br /&gt;
                Dim ParentColumn As String = ParentRow.Table.TableName &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
                If dt.Columns.Contains(ParentColumn) Then dr(ParentColumn) = ParentRow(ParentColumn)&lt;br /&gt;
            End If&lt;br /&gt;
            dt.Rows.Add(dr)&lt;br /&gt;
            For Each x As XmlNode In NodeRow.ChildNodes&lt;br /&gt;
                ParseElements(x, dr)&lt;br /&gt;
            Next&lt;br /&gt;
        End While&lt;br /&gt;
        If Not masterDs.Tables.Contains(ParseNode.Name) Then masterDs.Tables.Add(dt)&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Function CreateTable(ByVal Node As XmlNode, ByVal ParentRow As DataRow) As DataTable&lt;br /&gt;
        Dim dt As DataTable&lt;br /&gt;
        If masterDs.Tables.Contains(Node.Name) Then&lt;br /&gt;
            dt = masterDs.Tables(Node.Name)&lt;br /&gt;
            Return dt&lt;br /&gt;
        End If&lt;br /&gt;
        dt = New DataTable(Node.Name)&lt;br /&gt;
        'Add primary key col&lt;br /&gt;
        Dim KeyColumn As String = Node.Name &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
        dt.Columns.Add(New DataColumn(KeyColumn, GetType(System.Int32)))&lt;br /&gt;
        dt.Columns(0).AutoIncrement = True&lt;br /&gt;
        dt.Constraints.Add(dt.TableName &amp;amp; &amp;quot;PrimaryID&amp;quot;, dt.Columns(0), True)&lt;br /&gt;
        'Add parent ref column&lt;br /&gt;
        If Not IsNothing(ParentRow) Then&lt;br /&gt;
            Dim ParentColumn As String = ParentRow.Table.TableName &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
            dt.Columns.Add(New DataColumn(ParentColumn, GetType(System.Int32)))&lt;br /&gt;
        End If&lt;br /&gt;
        Return dt&lt;br /&gt;
    End Function&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-27T01:58:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 48tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Nested tables like Devices have states and ControlURLs - these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Using the functions below, a small .NET web app that shows Rooms/Scenes/Devices (Code for that below)   - Also see the forum post:&lt;br /&gt;
&lt;br /&gt;
[http://forum.micasaverde.com/index.php?topic=7950.0]&lt;br /&gt;
&lt;br /&gt;
Public Class _Default&lt;br /&gt;
    Inherits System.Web.UI.Page&lt;br /&gt;
&lt;br /&gt;
    Dim UserDataset As DataSet&lt;br /&gt;
    Dim ud As UserData&lt;br /&gt;
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load&lt;br /&gt;
        If Not Page.IsPostBack Then&lt;br /&gt;
            If Session(&amp;quot;UserData&amp;quot;) Is Nothing Then&lt;br /&gt;
                ud = New UserData&lt;br /&gt;
                Session(&amp;quot;UserData&amp;quot;) = ud.Parse_UserData_To_DataSet(&amp;quot;d:\test&amp;quot;)&lt;br /&gt;
            End If&lt;br /&gt;
        End If&lt;br /&gt;
        UserDataset = Session(&amp;quot;UserData&amp;quot;)&lt;br /&gt;
        GetData()&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Sub GetData()&lt;br /&gt;
        Dim RoomsTable As DataTable = UserDataset.Tables(&amp;quot;rooms&amp;quot;)&lt;br /&gt;
        Me.RoomsGrid.DataSource = RoomsTable&lt;br /&gt;
        Me.RoomsGrid.DataBind()&lt;br /&gt;
        RoomsGrid.ShowHeader = False&lt;br /&gt;
        Dim ScenesTable As DataTable = UserDataset.Tables(&amp;quot;scenes&amp;quot;)&lt;br /&gt;
        Me.ScenesGrid.DataSource = ScenesTable&lt;br /&gt;
        Me.ScenesGrid.DataBind()&lt;br /&gt;
        ScenesGrid.ShowHeader = False&lt;br /&gt;
        Dim DevicesTable As DataTable = UserDataset.Tables(&amp;quot;devices&amp;quot;)&lt;br /&gt;
        Dim drRemove As DataRow() = DevicesTable.Select(&amp;quot;invisible=1&amp;quot;)&lt;br /&gt;
        For Each dr As DataRow In drRemove&lt;br /&gt;
            DevicesTable.Rows.Remove(dr)&lt;br /&gt;
        Next&lt;br /&gt;
        Me.DevicesGrid.DataSource = DevicesTable&lt;br /&gt;
        Me.DevicesGrid.DataBind()&lt;br /&gt;
        DevicesGrid.ShowHeader = False&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
So, This is more like it!!!&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Dim masterDs As New DataSet&lt;br /&gt;
&lt;br /&gt;
    Sub Parse_UserData_To_DataSet(ByVal OutputFolder As String, _&lt;br /&gt;
                                          Optional ByVal veraURL As String = &amp;quot;http://myhome:49451&amp;quot;)&lt;br /&gt;
        'Parse XML and create XML files to load in to dataset directly&lt;br /&gt;
        Dim settings As New XmlReaderSettings()&lt;br /&gt;
        settings.DtdProcessing = DtdProcessing.Parse&lt;br /&gt;
        Dim reader As XmlReader = XmlReader.Create(veraURL &amp;amp; &amp;quot;/data_request?output_format=xml&amp;amp;id=user_data&amp;quot;, settings)&lt;br /&gt;
        Dim doc As New XmlDocument()&lt;br /&gt;
        doc.Load(reader)&lt;br /&gt;
        Dim root As XmlNode = doc.DocumentElement&lt;br /&gt;
        Dim ParseNodeEnum As IEnumerator = root.GetEnumerator&lt;br /&gt;
        While (ParseNodeEnum.MoveNext)&lt;br /&gt;
            Dim NodeRow As XmlNode = ParseNodeEnum.Current&lt;br /&gt;
            ParseElements(NodeRow, Nothing)&lt;br /&gt;
        End While&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Sub ParseElements(ByVal ParseNode As XmlNode, ByVal ParentRow As DataRow)&lt;br /&gt;
        Dim dt As DataTable = CreateTable(ParseNode, ParentRow)&lt;br /&gt;
        Dim ParseNodeEnum As IEnumerator = ParseNode.GetEnumerator&lt;br /&gt;
        While (ParseNodeEnum.MoveNext)&lt;br /&gt;
            Dim NodeRow As XmlNode = ParseNodeEnum.Current&lt;br /&gt;
            Dim dr As DataRow = dt.NewRow&lt;br /&gt;
            'Add Attributes as columns to Datatable&lt;br /&gt;
            Dim ienum As IEnumerator = NodeRow.Attributes.GetEnumerator()&lt;br /&gt;
            While ienum.MoveNext&lt;br /&gt;
                Dim atr As XmlAttribute = ienum.Current&lt;br /&gt;
                If dt.Columns.Contains(atr.Name) = False Then dt.Columns.Add(atr.Name)&lt;br /&gt;
                dr(atr.Name) = atr.Value&lt;br /&gt;
            End While&lt;br /&gt;
            If Not IsNothing(ParentRow) Then&lt;br /&gt;
                Dim ParentColumn As String = ParentRow.Table.TableName &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
                If dt.Columns.Contains(ParentColumn) Then dr(ParentColumn) = ParentRow(ParentColumn)&lt;br /&gt;
            End If&lt;br /&gt;
            dt.Rows.Add(dr)&lt;br /&gt;
            For Each x As XmlNode In NodeRow.ChildNodes&lt;br /&gt;
                ParseElements(x, dr)&lt;br /&gt;
            Next&lt;br /&gt;
        End While&lt;br /&gt;
        If Not masterDs.Tables.Contains(ParseNode.Name) Then masterDs.Tables.Add(dt)&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Function CreateTable(ByVal Node As XmlNode, ByVal ParentRow As DataRow) As DataTable&lt;br /&gt;
        Dim dt As DataTable&lt;br /&gt;
        If masterDs.Tables.Contains(Node.Name) Then&lt;br /&gt;
            dt = masterDs.Tables(Node.Name)&lt;br /&gt;
            Return dt&lt;br /&gt;
        End If&lt;br /&gt;
        dt = New DataTable(Node.Name)&lt;br /&gt;
        'Add primary key col&lt;br /&gt;
        Dim KeyColumn As String = Node.Name &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
        dt.Columns.Add(New DataColumn(KeyColumn, GetType(System.Int32)))&lt;br /&gt;
        dt.Columns(0).AutoIncrement = True&lt;br /&gt;
        dt.Constraints.Add(dt.TableName &amp;amp; &amp;quot;PrimaryID&amp;quot;, dt.Columns(0), True)&lt;br /&gt;
        'Add parent ref column&lt;br /&gt;
        If Not IsNothing(ParentRow) Then&lt;br /&gt;
            Dim ParentColumn As String = ParentRow.Table.TableName &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
            dt.Columns.Add(New DataColumn(ParentColumn, GetType(System.Int32)))&lt;br /&gt;
        End If&lt;br /&gt;
        Return dt&lt;br /&gt;
    End Function&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-25T18:49:09Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 48tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Nested tables like Devices have states and ControlURLs - these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
So, This is more like it!!!&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Dim masterDs As New DataSet&lt;br /&gt;
&lt;br /&gt;
    Sub Parse_UserData_To_DataSet(ByVal OutputFolder As String, _&lt;br /&gt;
                                          Optional ByVal veraURL As String = &amp;quot;http://myhome:49451&amp;quot;)&lt;br /&gt;
        'Parse XML and create XML files to load in to dataset directly&lt;br /&gt;
        Dim settings As New XmlReaderSettings()&lt;br /&gt;
        settings.DtdProcessing = DtdProcessing.Parse&lt;br /&gt;
        Dim reader As XmlReader = XmlReader.Create(veraURL &amp;amp; &amp;quot;/data_request?output_format=xml&amp;amp;id=user_data&amp;quot;, settings)&lt;br /&gt;
        Dim doc As New XmlDocument()&lt;br /&gt;
        doc.Load(reader)&lt;br /&gt;
        Dim root As XmlNode = doc.DocumentElement&lt;br /&gt;
        Dim ParseNodeEnum As IEnumerator = root.GetEnumerator&lt;br /&gt;
        While (ParseNodeEnum.MoveNext)&lt;br /&gt;
            Dim NodeRow As XmlNode = ParseNodeEnum.Current&lt;br /&gt;
            ParseElements(NodeRow, Nothing)&lt;br /&gt;
        End While&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Sub ParseElements(ByVal ParseNode As XmlNode, ByVal ParentRow As DataRow)&lt;br /&gt;
        Dim dt As DataTable = CreateTable(ParseNode, ParentRow)&lt;br /&gt;
        Dim ParseNodeEnum As IEnumerator = ParseNode.GetEnumerator&lt;br /&gt;
        While (ParseNodeEnum.MoveNext)&lt;br /&gt;
            Dim NodeRow As XmlNode = ParseNodeEnum.Current&lt;br /&gt;
            Dim dr As DataRow = dt.NewRow&lt;br /&gt;
            'Add Attributes as columns to Datatable&lt;br /&gt;
            Dim ienum As IEnumerator = NodeRow.Attributes.GetEnumerator()&lt;br /&gt;
            While ienum.MoveNext&lt;br /&gt;
                Dim atr As XmlAttribute = ienum.Current&lt;br /&gt;
                If dt.Columns.Contains(atr.Name) = False Then dt.Columns.Add(atr.Name)&lt;br /&gt;
                dr(atr.Name) = atr.Value&lt;br /&gt;
            End While&lt;br /&gt;
            If Not IsNothing(ParentRow) Then&lt;br /&gt;
                Dim ParentColumn As String = ParentRow.Table.TableName &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
                If dt.Columns.Contains(ParentColumn) Then dr(ParentColumn) = ParentRow(ParentColumn)&lt;br /&gt;
            End If&lt;br /&gt;
            dt.Rows.Add(dr)&lt;br /&gt;
            For Each x As XmlNode In NodeRow.ChildNodes&lt;br /&gt;
                ParseElements(x, dr)&lt;br /&gt;
            Next&lt;br /&gt;
        End While&lt;br /&gt;
        If Not masterDs.Tables.Contains(ParseNode.Name) Then masterDs.Tables.Add(dt)&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Function CreateTable(ByVal Node As XmlNode, ByVal ParentRow As DataRow) As DataTable&lt;br /&gt;
        Dim dt As DataTable&lt;br /&gt;
        If masterDs.Tables.Contains(Node.Name) Then&lt;br /&gt;
            dt = masterDs.Tables(Node.Name)&lt;br /&gt;
            Return dt&lt;br /&gt;
        End If&lt;br /&gt;
        dt = New DataTable(Node.Name)&lt;br /&gt;
        'Add primary key col&lt;br /&gt;
        Dim KeyColumn As String = Node.Name &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
        dt.Columns.Add(New DataColumn(KeyColumn, GetType(System.Int32)))&lt;br /&gt;
        dt.Columns(0).AutoIncrement = True&lt;br /&gt;
        dt.Constraints.Add(dt.TableName &amp;amp; &amp;quot;PrimaryID&amp;quot;, dt.Columns(0), True)&lt;br /&gt;
        'Add parent ref column&lt;br /&gt;
        If Not IsNothing(ParentRow) Then&lt;br /&gt;
            Dim ParentColumn As String = ParentRow.Table.TableName &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
            dt.Columns.Add(New DataColumn(ParentColumn, GetType(System.Int32)))&lt;br /&gt;
        End If&lt;br /&gt;
        Return dt&lt;br /&gt;
    End Function&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-25T18:48:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 48tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Nested tables like Devices have states and ControlURLs - these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
So, This is more like it!!!&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Dim masterDs As New DataSet&lt;br /&gt;
&lt;br /&gt;
    Sub Parse_UserData_To_DataSet(ByVal OutputFolder As String, _&lt;br /&gt;
                                          Optional ByVal veraURL As String = &amp;quot;http://myhome:49451&amp;quot;)&lt;br /&gt;
        'Parse XML and create XML files to load in to dataset directly&lt;br /&gt;
        Dim settings As New XmlReaderSettings()&lt;br /&gt;
        settings.DtdProcessing = DtdProcessing.Parse&lt;br /&gt;
        Dim reader As XmlReader = XmlReader.Create(veraURL &amp;amp; &amp;quot;/data_request?output_format=xml&amp;amp;id=user_data&amp;quot;, settings)&lt;br /&gt;
        Dim doc As New XmlDocument()&lt;br /&gt;
        doc.Load(reader)&lt;br /&gt;
        Dim root As XmlNode = doc.DocumentElement&lt;br /&gt;
        Dim ParseNodeEnum As IEnumerator = root.GetEnumerator&lt;br /&gt;
        While (ParseNodeEnum.MoveNext)&lt;br /&gt;
            Dim NodeRow As XmlNode = ParseNodeEnum.Current&lt;br /&gt;
            ParseElements(NodeRow, Nothing)&lt;br /&gt;
        End While&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Sub ParseElements(ByVal ParseNode As XmlNode, ByVal ParentRow As DataRow)&lt;br /&gt;
        Dim dt As DataTable = CreateTable(ParseNode, ParentRow)&lt;br /&gt;
&lt;br /&gt;
        Dim ParseNodeEnum As IEnumerator = ParseNode.GetEnumerator&lt;br /&gt;
        While (ParseNodeEnum.MoveNext)&lt;br /&gt;
            Dim NodeRow As XmlNode = ParseNodeEnum.Current&lt;br /&gt;
            Dim dr As DataRow = dt.NewRow&lt;br /&gt;
            'Add Attributes as columns to Datatable&lt;br /&gt;
            Dim ienum As IEnumerator = NodeRow.Attributes.GetEnumerator()&lt;br /&gt;
            While ienum.MoveNext&lt;br /&gt;
                Dim atr As XmlAttribute = ienum.Current&lt;br /&gt;
                If dt.Columns.Contains(atr.Name) = False Then dt.Columns.Add(atr.Name)&lt;br /&gt;
                dr(atr.Name) = atr.Value&lt;br /&gt;
            End While&lt;br /&gt;
            If Not IsNothing(ParentRow) Then&lt;br /&gt;
                Dim ParentColumn As String = ParentRow.Table.TableName &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
                If dt.Columns.Contains(ParentColumn) Then dr(ParentColumn) = ParentRow(ParentColumn)&lt;br /&gt;
            End If&lt;br /&gt;
            dt.Rows.Add(dr)&lt;br /&gt;
            For Each x As XmlNode In NodeRow.ChildNodes&lt;br /&gt;
                ParseElements(x, dr)&lt;br /&gt;
            Next&lt;br /&gt;
        End While&lt;br /&gt;
        If Not masterDs.Tables.Contains(ParseNode.Name) Then masterDs.Tables.Add(dt)&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Function CreateTable(ByVal Node As XmlNode, ByVal ParentRow As DataRow) As DataTable&lt;br /&gt;
        Dim dt As DataTable&lt;br /&gt;
        If masterDs.Tables.Contains(Node.Name) Then&lt;br /&gt;
            dt = masterDs.Tables(Node.Name)&lt;br /&gt;
            Return dt&lt;br /&gt;
        End If&lt;br /&gt;
&lt;br /&gt;
        dt = New DataTable(Node.Name)&lt;br /&gt;
        'Add primary key col&lt;br /&gt;
        Dim KeyColumn As String = Node.Name &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
        dt.Columns.Add(New DataColumn(KeyColumn, GetType(System.Int32)))&lt;br /&gt;
        dt.Columns(0).AutoIncrement = True&lt;br /&gt;
        dt.Constraints.Add(dt.TableName &amp;amp; &amp;quot;PrimaryID&amp;quot;, dt.Columns(0), True)&lt;br /&gt;
&lt;br /&gt;
        'Add parent ref column&lt;br /&gt;
        If Not IsNothing(ParentRow) Then&lt;br /&gt;
            Dim ParentColumn As String = ParentRow.Table.TableName &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
            dt.Columns.Add(New DataColumn(ParentColumn, GetType(System.Int32)))&lt;br /&gt;
        End If&lt;br /&gt;
        Return dt&lt;br /&gt;
    End Function&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-25T17:58:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 48tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Nested tables like Devices have states and ControlURLs - these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
So, This is more like it!!!&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Dim masterDs As New DataSet&lt;br /&gt;
&lt;br /&gt;
    Sub Parse_UserData_To_DataSet(ByVal OutputFolder As String, _&lt;br /&gt;
                                          Optional ByVal veraURL As String = &amp;quot;http://myhome:49451&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        'Parse XML and create XML files to load in to dataset directly&lt;br /&gt;
        Dim settings As New XmlReaderSettings()&lt;br /&gt;
        settings.DtdProcessing = DtdProcessing.Parse&lt;br /&gt;
        Dim reader As XmlReader = XmlReader.Create(veraURL &amp;amp; &amp;quot;/data_request?output_format=xml&amp;amp;id=user_data&amp;quot;, settings)&lt;br /&gt;
        Dim doc As New XmlDocument()&lt;br /&gt;
        doc.Load(reader)&lt;br /&gt;
        Dim root As XmlNode = doc.DocumentElement&lt;br /&gt;
        Dim ParseNodeEnum As IEnumerator = root.GetEnumerator&lt;br /&gt;
        While (ParseNodeEnum.MoveNext)&lt;br /&gt;
            Dim NodeRow As XmlNode = ParseNodeEnum.Current&lt;br /&gt;
            ParseElements(NodeRow, Nothing)&lt;br /&gt;
        End While&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Sub ParseElements(ByVal ParseNode As XmlNode, ByVal ParentRow As DataRow)&lt;br /&gt;
        Dim dt As DataTable = CreateTable(ParseNode, ParentRow)&lt;br /&gt;
&lt;br /&gt;
        Dim ParseNodeEnum As IEnumerator = ParseNode.GetEnumerator&lt;br /&gt;
        While (ParseNodeEnum.MoveNext)&lt;br /&gt;
            Dim NodeRow As XmlNode = ParseNodeEnum.Current&lt;br /&gt;
            Dim dr As DataRow = dt.NewRow&lt;br /&gt;
            'Add Attributes as columns to Datatable&lt;br /&gt;
            Dim ienum As IEnumerator = NodeRow.Attributes.GetEnumerator()&lt;br /&gt;
            While ienum.MoveNext&lt;br /&gt;
                Dim atr As XmlAttribute = ienum.Current&lt;br /&gt;
                If dt.Columns.Contains(atr.Name) = False Then dt.Columns.Add(atr.Name)&lt;br /&gt;
                dr(atr.Name) = atr.Value&lt;br /&gt;
            End While&lt;br /&gt;
            If Not IsNothing(ParentRow) Then&lt;br /&gt;
                Dim ParentColumn As String = ParentRow.Table.TableName &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
                If dt.Columns.Contains(ParentColumn) Then dr(ParentColumn) = ParentRow(ParentColumn)&lt;br /&gt;
            End If&lt;br /&gt;
            dt.Rows.Add(dr)&lt;br /&gt;
            For Each x As XmlNode In NodeRow.ChildNodes&lt;br /&gt;
                ParseElements(x, dr)&lt;br /&gt;
            Next&lt;br /&gt;
        End While&lt;br /&gt;
        If Not masterDs.Tables.Contains(ParseNode.Name) Then masterDs.Tables.Add(dt)&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Function CreateTable(ByVal Node As XmlNode, ByVal ParentRow As DataRow) As DataTable&lt;br /&gt;
        Dim dt As DataTable&lt;br /&gt;
        If masterDs.Tables.Contains(Node.Name) Then&lt;br /&gt;
            dt = masterDs.Tables(Node.Name)&lt;br /&gt;
            Return dt&lt;br /&gt;
        End If&lt;br /&gt;
&lt;br /&gt;
        dt = New DataTable(Node.Name)&lt;br /&gt;
        'Add primary key col&lt;br /&gt;
        Dim KeyColumn As String = Node.Name &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
        dt.Columns.Add(New DataColumn(KeyColumn, GetType(System.Int32)))&lt;br /&gt;
        dt.Columns(0).AutoIncrement = True&lt;br /&gt;
        dt.Constraints.Add(dt.TableName &amp;amp; &amp;quot;PrimaryID&amp;quot;, dt.Columns(0), True)&lt;br /&gt;
&lt;br /&gt;
        'Add parent ref column&lt;br /&gt;
        If Not IsNothing(ParentRow) Then&lt;br /&gt;
            Dim ParentColumn As String = ParentRow.Table.TableName &amp;amp; &amp;quot;_OurID&amp;quot;&lt;br /&gt;
            dt.Columns.Add(New DataColumn(ParentColumn, GetType(System.Int32)))&lt;br /&gt;
        End If&lt;br /&gt;
        Return dt&lt;br /&gt;
    End Function&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-25T14:49:06Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 14 tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Devices have states and ControlURLs , these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   Sub Parse_UserData_To_DataSet(ByVal OutputFolder As String, _&lt;br /&gt;
                                          Optional ByVal veraURL As String = &amp;quot;http://myhome:49451&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        'Parse XML and create XML files to load in to dataset directly&lt;br /&gt;
        Dim ControlURL As New StringBuilder(&amp;quot;&amp;lt;ControlURLs&amp;gt;&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
        Dim States As New StringBuilder(&amp;quot;&amp;lt;states&amp;gt;&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
        Dim Entries As New ArrayList&lt;br /&gt;
&lt;br /&gt;
        Dim settings As New XmlReaderSettings()&lt;br /&gt;
        settings.DtdProcessing = DtdProcessing.Parse&lt;br /&gt;
        Dim reader As XmlReader = XmlReader.Create(veraURL &amp;amp; &amp;quot;/data_request?output_format=xml&amp;amp;id=user_data&amp;quot;, settings)&lt;br /&gt;
        Dim doc As New XmlDocument()&lt;br /&gt;
        doc.Load(reader)&lt;br /&gt;
        Dim root As XmlNode = doc.DocumentElement&lt;br /&gt;
        Dim fout As New StreamWriter(Path.Combine(OutputFolder, root.Name &amp;amp; &amp;quot;.xml&amp;quot;))&lt;br /&gt;
        Dim ienumroot As IEnumerator = root.Attributes.GetEnumerator()&lt;br /&gt;
        fout.Write(&amp;quot;&amp;lt;root &amp;quot;)&lt;br /&gt;
        While ienumroot.MoveNext&lt;br /&gt;
            Dim atr As XmlAttribute = ienumroot.Current&lt;br /&gt;
            fout.Write(atr.Name &amp;amp; &amp;quot;=&amp;quot; &amp;amp; &amp;quot;&amp;quot;&amp;quot;&amp;quot; &amp;amp; atr.Value &amp;amp; &amp;quot;&amp;quot;&amp;quot; &amp;quot;)&lt;br /&gt;
        End While&lt;br /&gt;
        fout.Write(&amp;quot;&amp;gt;&amp;lt;/root&amp;gt;&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
        Entries.Add(Path.Combine(OutputFolder, root.Name &amp;amp; &amp;quot;.xml&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        Dim ienum As IEnumerator = root.GetEnumerator()&lt;br /&gt;
        Dim ParseNode As XmlNode&lt;br /&gt;
        While (ienum.MoveNext())&lt;br /&gt;
            ParseNode = CType(ienum.Current, XmlNode)&lt;br /&gt;
            fout = New StreamWriter(Path.Combine(OutputFolder, ParseNode.Name &amp;amp; &amp;quot;.xml&amp;quot;))&lt;br /&gt;
            fout.Write(ParseNode.OuterXml)&lt;br /&gt;
            fout.Close()&lt;br /&gt;
            Entries.Add(Path.Combine(OutputFolder, ParseNode.Name &amp;amp; &amp;quot;.xml&amp;quot;))&lt;br /&gt;
            If ParseNode.Name &amp;lt;&amp;gt; &amp;quot;devices&amp;quot; Then Continue While&lt;br /&gt;
&lt;br /&gt;
            'Get States / ControlURLS also as seperate table&lt;br /&gt;
            Dim ServiceID As Integer = 1&lt;br /&gt;
            Dim DeviceDetails As XmlNode&lt;br /&gt;
            Dim devenum As IEnumerator = ParseNode.GetEnumerator&lt;br /&gt;
            '-------Devices Loop&lt;br /&gt;
            While (devenum.MoveNext)&lt;br /&gt;
                DeviceDetails = CType(devenum.Current, XmlNode)&lt;br /&gt;
                Dim DeviceID As String = DeviceDetails.Attributes.GetNamedItem(&amp;quot;id&amp;quot;).InnerText&lt;br /&gt;
&lt;br /&gt;
                Dim devChildNode As XmlNode&lt;br /&gt;
                Dim devChildNodeInner As XmlNode&lt;br /&gt;
                Dim childEnum As IEnumerator = DeviceDetails.GetEnumerator&lt;br /&gt;
                While childEnum.MoveNext&lt;br /&gt;
                    devChildNode = CType(childEnum.Current, XmlNode)&lt;br /&gt;
                    Dim childEnumInner As IEnumerator = devChildNode.GetEnumerator&lt;br /&gt;
                    While childEnumInner.MoveNext&lt;br /&gt;
                        devChildNodeInner = childEnumInner.Current&lt;br /&gt;
&lt;br /&gt;
                        Dim DeviceIDAttr As XmlAttribute = doc.CreateAttribute(&amp;quot;DeviceID&amp;quot;)&lt;br /&gt;
                        DeviceIDAttr.InnerText = DeviceID&lt;br /&gt;
                        devChildNodeInner.Attributes.Append(DeviceIDAttr)&lt;br /&gt;
&lt;br /&gt;
                        If devChildNode.OuterXml.StartsWith(&amp;quot;&amp;lt;state&amp;quot;) Then&lt;br /&gt;
                            States.Append(devChildNodeInner.OuterXml &amp;amp; vbCrLf)&lt;br /&gt;
                        Else&lt;br /&gt;
                            Dim serviceIDstr As String = &amp;quot;&amp;lt;service_&amp;quot; &amp;amp; ServiceID&lt;br /&gt;
                            Dim strtoWrite As String = devChildNodeInner.OuterXml.Replace(serviceIDstr, &amp;quot;&amp;lt;service ID=&amp;quot;&amp;quot;&amp;quot; &amp;amp; ServiceID &amp;amp; &amp;quot;&amp;quot;&amp;quot; &amp;quot;)&lt;br /&gt;
                            strtoWrite = strtoWrite.Replace(&amp;quot;&amp;lt;/service_&amp;quot; &amp;amp; ServiceID &amp;amp; &amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/service&amp;gt;&amp;quot;)&lt;br /&gt;
                            ControlURL.Append(strtoWrite &amp;amp; vbCrLf)&lt;br /&gt;
                            ServiceID += 1&lt;br /&gt;
                        End If&lt;br /&gt;
                    End While&lt;br /&gt;
                End While&lt;br /&gt;
            End While&lt;br /&gt;
            '------Devices Loop&lt;br /&gt;
&lt;br /&gt;
        End While&lt;br /&gt;
&lt;br /&gt;
        States.Append(&amp;quot;&amp;lt;/states&amp;gt;&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
        fout = New StreamWriter(Path.Combine(OutputFolder, &amp;quot;states.xml&amp;quot;))&lt;br /&gt;
        fout.Write(States.ToString)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
&lt;br /&gt;
        ControlURL.Append(&amp;quot;&amp;lt;/ControlURLs&amp;gt;&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
        fout = New StreamWriter(Path.Combine(OutputFolder, &amp;quot;ControlURL.xml&amp;quot;))&lt;br /&gt;
        fout.Write(ControlURL.ToString)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
        Entries.Add(Path.Combine(OutputFolder, &amp;quot;states.xml&amp;quot;))&lt;br /&gt;
        Entries.Add(Path.Combine(OutputFolder, &amp;quot;ControlURL.xml&amp;quot;))&lt;br /&gt;
        'Parsing Done&lt;br /&gt;
&lt;br /&gt;
        'Create a Single XML file so it can be loaded in to dataset with Dataset.ReadXML&lt;br /&gt;
        Dim finalDS As New DataSet&lt;br /&gt;
        For Each fname As String In Entries&lt;br /&gt;
&lt;br /&gt;
            Dim ds As New DataSet&lt;br /&gt;
            ds.ReadXml(fname)&lt;br /&gt;
            Try&lt;br /&gt;
                finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
                finalDS.Tables(finalDS.Tables.Count - 1).TableName = ds.Tables(0).TableName&lt;br /&gt;
            Catch ex As Exception&lt;br /&gt;
            End Try&lt;br /&gt;
        Next&lt;br /&gt;
        finalDS.WriteXml(Path.Combine(OutputFolder, &amp;quot;UserData.xml&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-25T14:10:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 14 tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Devices have states and ControlURLs , these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   Sub Parse_UserData_To_DataSet(ByVal OutputFolder As String, _&lt;br /&gt;
                                          Optional ByVal veraURL As String = &amp;quot;http://myhome:49451&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        'Parse XML and create XML files to load in to dataset directly&lt;br /&gt;
        Dim ControlURL As New StringBuilder(&amp;quot;&amp;lt;ControlURLs&amp;gt;&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
        Dim States As New StringBuilder(&amp;quot;&amp;lt;states&amp;gt;&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
        Dim Entries As New ArrayList&lt;br /&gt;
&lt;br /&gt;
        Dim settings As New XmlReaderSettings()&lt;br /&gt;
        settings.DtdProcessing = DtdProcessing.Parse&lt;br /&gt;
        Dim reader As XmlReader = XmlReader.Create(veraURL &amp;amp; &amp;quot;/data_request?output_format=xml&amp;amp;id=user_data&amp;quot;, settings)&lt;br /&gt;
        Dim doc As New XmlDocument()&lt;br /&gt;
        doc.Load(reader)&lt;br /&gt;
        Dim root As XmlNode = doc.DocumentElement&lt;br /&gt;
        Dim fout As New StreamWriter(Path.Combine(OutputFolder, root.Name &amp;amp; &amp;quot;.xml&amp;quot;))&lt;br /&gt;
        Dim ienumroot As IEnumerator = root.Attributes.GetEnumerator()&lt;br /&gt;
        fout.Write(&amp;quot;&amp;lt;root &amp;quot;)&lt;br /&gt;
        While ienumroot.MoveNext&lt;br /&gt;
            Dim atr As XmlAttribute = ienumroot.Current&lt;br /&gt;
            fout.Write(atr.Name &amp;amp; &amp;quot;=&amp;quot; &amp;amp; &amp;quot;&amp;quot;&amp;quot;&amp;quot; &amp;amp; atr.Value &amp;amp; &amp;quot;&amp;quot;&amp;quot; &amp;quot;)&lt;br /&gt;
        End While&lt;br /&gt;
        fout.Write(&amp;quot;&amp;gt;&amp;lt;/root&amp;gt;&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
        Entries.Add(Path.Combine(OutputFolder, root.Name &amp;amp; &amp;quot;.xml&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        Dim ienum As IEnumerator = root.GetEnumerator()&lt;br /&gt;
        Dim ParseNode As XmlNode&lt;br /&gt;
        While (ienum.MoveNext())&lt;br /&gt;
            ParseNode = CType(ienum.Current, XmlNode)&lt;br /&gt;
            fout = New StreamWriter(Path.Combine(OutputFolder, ParseNode.Name &amp;amp; &amp;quot;.xml&amp;quot;))&lt;br /&gt;
            fout.Write(ParseNode.OuterXml)&lt;br /&gt;
            fout.Close()&lt;br /&gt;
            Entries.Add(Path.Combine(OutputFolder, ParseNode.Name &amp;amp; &amp;quot;.xml&amp;quot;))&lt;br /&gt;
            If ParseNode.Name &amp;lt;&amp;gt; &amp;quot;devices&amp;quot; Then Continue While&lt;br /&gt;
&lt;br /&gt;
            'Get States / ControlURLS also as seperate table&lt;br /&gt;
            Dim ServiceID As Integer = 1&lt;br /&gt;
            Dim DeviceDetails As XmlNode&lt;br /&gt;
            Dim devenum As IEnumerator = ParseNode.GetEnumerator&lt;br /&gt;
            '-------Devices Loop&lt;br /&gt;
            While (devenum.MoveNext)&lt;br /&gt;
                DeviceDetails = CType(devenum.Current, XmlNode)&lt;br /&gt;
                Dim DeviceID As String = DeviceDetails.Attributes.GetNamedItem(&amp;quot;id&amp;quot;).InnerText&lt;br /&gt;
&lt;br /&gt;
                Dim devChildNode As XmlNode&lt;br /&gt;
                Dim childEnum As IEnumerator = DeviceDetails.GetEnumerator&lt;br /&gt;
                While childEnum.MoveNext&lt;br /&gt;
                    devChildNode = CType(childEnum.Current, XmlNode)&lt;br /&gt;
                    Dim DeviceIDAttr As XmlAttribute = doc.CreateAttribute(&amp;quot;DeviceID&amp;quot;)&lt;br /&gt;
                    DeviceIDAttr.InnerText = DeviceID&lt;br /&gt;
                    devChildNode.Attributes.Append(DeviceIDAttr)&lt;br /&gt;
                    If devChildNode.OuterXml.StartsWith(&amp;quot;&amp;lt;state&amp;quot;) Then&lt;br /&gt;
                        States.Append(devChildNode.OuterXml &amp;amp; vbCrLf)&lt;br /&gt;
                    Else&lt;br /&gt;
                        Dim serviceIDstr As String = &amp;quot;&amp;lt;service_&amp;quot; &amp;amp; ServiceID&lt;br /&gt;
                        Dim strtoWrite As String = devChildNode.OuterXml.Replace(serviceIDstr, &amp;quot;&amp;lt;service ID=&amp;quot;&amp;quot;&amp;quot; &amp;amp; ServiceID &amp;amp; &amp;quot;&amp;quot;&amp;quot; &amp;quot;)&lt;br /&gt;
                        strtoWrite = strtoWrite.Replace(&amp;quot;&amp;lt;/service_&amp;quot; &amp;amp; ServiceID &amp;amp; &amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/service&amp;gt;&amp;quot;)&lt;br /&gt;
                        ControlURL.Append(strtoWrite &amp;amp; vbCrLf)&lt;br /&gt;
                        ServiceID += 1&lt;br /&gt;
                    End If&lt;br /&gt;
                End While&lt;br /&gt;
&lt;br /&gt;
            End While&lt;br /&gt;
            '------Devices Loop&lt;br /&gt;
&lt;br /&gt;
        End While&lt;br /&gt;
&lt;br /&gt;
        States.Append(&amp;quot;&amp;lt;/states&amp;gt;&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
        fout = New StreamWriter(Path.Combine(OutputFolder, &amp;quot;states.xml&amp;quot;))&lt;br /&gt;
        fout.Write(States.ToString)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
&lt;br /&gt;
        ControlURL.Append(&amp;quot;&amp;lt;/ControlURLs&amp;gt;&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
        fout = New StreamWriter(Path.Combine(OutputFolder, &amp;quot;ControlURL.xml&amp;quot;))&lt;br /&gt;
        fout.Write(ControlURL.ToString)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
        Entries.Add(Path.Combine(OutputFolder, &amp;quot;states.xml&amp;quot;))&lt;br /&gt;
        Entries.Add(Path.Combine(OutputFolder, &amp;quot;ControlURL.xml&amp;quot;))&lt;br /&gt;
        'Parsing Done&lt;br /&gt;
&lt;br /&gt;
        'Create a Single XML file so it can be loaded in to dataset with Dataset.ReadXML&lt;br /&gt;
        Dim finalDS As New DataSet&lt;br /&gt;
        For Each fname As String In Entries&lt;br /&gt;
&lt;br /&gt;
            Dim ds As New DataSet&lt;br /&gt;
            ds.ReadXml(fname)&lt;br /&gt;
            Try&lt;br /&gt;
                finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
                finalDS.Tables(finalDS.Tables.Count - 1).TableName = ds.Tables(0).TableName&lt;br /&gt;
            Catch ex As Exception&lt;br /&gt;
            End Try&lt;br /&gt;
        Next&lt;br /&gt;
        finalDS.WriteXml(Path.Combine(OutputFolder, &amp;quot;UserData.xml&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-25T13:11:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 14 tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Devices have states and ControlURLs , these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To be updated soon...&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-24T18:53:48Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 14 tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Devices have states and ControlURLs , these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: For the JSONObject used here: 'Credits: http://www.vbforums.com/showthread.php?t=645037&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Private Sub Parse_UserData_To_DataSet(ByVal OutputFolder As String, _&lt;br /&gt;
                                          Optional ByVal veraURL As String = &amp;quot;http://myhome:49451&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        Dim Entries As New ArrayList&lt;br /&gt;
        Dim ds As New DataSet&lt;br /&gt;
        Dim userDatajson As String = GetWebPageContent(veraURL &amp;amp; &amp;quot;/data_request?output_format=json&amp;amp;id=user_data&amp;quot;)&lt;br /&gt;
        Dim userData As String = GetWebPageContent(veraURL &amp;amp; &amp;quot;/data_request?output_format=xml&amp;amp;id=user_data&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        'Create Root Data file&lt;br /&gt;
        Dim si As Integer = userData.IndexOf(&amp;quot;&amp;lt;root&amp;quot;)&lt;br /&gt;
        Dim ei As Integer = userData.IndexOf(&amp;quot;&amp;gt;&amp;quot;, si)&lt;br /&gt;
        Dim rootstr As String = userData.Substring(si, ei - si + 1)&lt;br /&gt;
        rootstr = rootstr.Replace(vbLf, &amp;quot;&amp;quot;) &amp;amp; &amp;quot;&amp;lt;/root&amp;gt;&amp;quot;&lt;br /&gt;
        Dim fo As New IO.StreamWriter(OutputFolder &amp;amp; &amp;quot;\root.xml&amp;quot;)&lt;br /&gt;
        fo.WriteLine(rootstr)&lt;br /&gt;
        fo.Close()&lt;br /&gt;
&lt;br /&gt;
        Entries.Add(&amp;quot;root&amp;quot;)&lt;br /&gt;
        'create rest of it!&lt;br /&gt;
        Dim jo As New JSONObject(userDatajson)&lt;br /&gt;
        For Each s As KeyValuePair(Of String, String) In jo._properties&lt;br /&gt;
            si = userData.IndexOf(&amp;quot;&amp;lt;&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
            ei = userData.IndexOf(&amp;quot;&amp;lt;/&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
            If si &amp;gt;= 0 AndAlso ei &amp;gt; 0 Then&lt;br /&gt;
                Dim thisEntry As String = userData.Substring(si, ei - si + (&amp;quot;&amp;lt;/&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;&amp;gt;&amp;quot;).Length)&lt;br /&gt;
                Dim fname As String = OutputFolder &amp;amp; &amp;quot;\&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;.xml&amp;quot;&lt;br /&gt;
                Dim fo1 As New IO.StreamWriter(fname)&lt;br /&gt;
                fo1.WriteLine(thisEntry)&lt;br /&gt;
                fo1.Close()&lt;br /&gt;
                Entries.Add(s.Key)&lt;br /&gt;
            End If&lt;br /&gt;
        Next&lt;br /&gt;
&lt;br /&gt;
        'Put all the tables in a single dataset&lt;br /&gt;
        Dim finalDS As New DataSet&lt;br /&gt;
        For Each s As String In Entries&lt;br /&gt;
            Dim fname As String = OutputFolder &amp;amp; &amp;quot;\&amp;quot; &amp;amp; s &amp;amp; &amp;quot;.xml&amp;quot;&lt;br /&gt;
            ds = New DataSet&lt;br /&gt;
            ds.ReadXml(fname)&lt;br /&gt;
            Try&lt;br /&gt;
                ds.Tables(0).TableName = s&lt;br /&gt;
                finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
                finalDS.Tables(finalDS.Tables.Count - 1).TableName = s&lt;br /&gt;
            Catch ex As Exception&lt;br /&gt;
            End Try&lt;br /&gt;
&lt;br /&gt;
        Next&lt;br /&gt;
&lt;br /&gt;
        'devices have controlURL &amp;amp; states&lt;br /&gt;
        DeviceParse(OutputFolder)&lt;br /&gt;
&lt;br /&gt;
        ds = New DataSet&lt;br /&gt;
        ds.ReadXml(OutputFolder &amp;amp; &amp;quot;\states.xml&amp;quot;)&lt;br /&gt;
        Try&lt;br /&gt;
            ds.Tables(0).TableName = &amp;quot;states&amp;quot;&lt;br /&gt;
            finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
            finalDS.Tables(finalDS.Tables.Count - 1).TableName = &amp;quot;states&amp;quot;&lt;br /&gt;
        Catch ex As Exception&lt;br /&gt;
        End Try&lt;br /&gt;
        ds = New DataSet&lt;br /&gt;
        ds.ReadXml(OutputFolder &amp;amp; &amp;quot;\ControlURLs.xml&amp;quot;)&lt;br /&gt;
        Try&lt;br /&gt;
            ds.Tables(0).TableName = &amp;quot;ControlURLs&amp;quot;&lt;br /&gt;
            finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
            finalDS.Tables(finalDS.Tables.Count - 1).TableName = &amp;quot;ControlURLs&amp;quot;&lt;br /&gt;
        Catch ex As Exception&lt;br /&gt;
            MsgBox(ex.Message)&lt;br /&gt;
        End Try&lt;br /&gt;
&lt;br /&gt;
        finalDS.WriteXml(OutputFolder &amp;amp; &amp;quot;\UserData.xml&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Sub DeviceParse(ByVal OutputFolder As String)&lt;br /&gt;
        'ControlURLs&lt;br /&gt;
        'states&lt;br /&gt;
        Dim filename As String = OutputFolder &amp;amp; &amp;quot;\devices.xml&amp;quot;&lt;br /&gt;
        Dim ControlURL As String = &amp;quot;&amp;lt;ControlURLs&amp;gt;&amp;quot; &amp;amp; vbCrLf&lt;br /&gt;
        Dim States As String = &amp;quot;&amp;lt;states&amp;gt;&amp;quot; &amp;amp; vbCrLf&lt;br /&gt;
&lt;br /&gt;
        Dim ServiceID As Integer = 1&lt;br /&gt;
&lt;br /&gt;
        Dim settings As New XmlReaderSettings()&lt;br /&gt;
        settings.DtdProcessing = DtdProcessing.Parse&lt;br /&gt;
&lt;br /&gt;
        Dim reader As XmlReader = XmlReader.Create(filename, settings)&lt;br /&gt;
        Dim doc As New XmlDocument()&lt;br /&gt;
        doc.Load(reader)&lt;br /&gt;
        Dim root As XmlNode = doc.DocumentElement&lt;br /&gt;
        Dim ienum As IEnumerator = root.GetEnumerator()&lt;br /&gt;
        Dim device As XmlNode&lt;br /&gt;
        While (ienum.MoveNext())&lt;br /&gt;
            device = CType(ienum.Current, XmlNode)&lt;br /&gt;
            Dim DeviceID As String = device.Attributes.GetNamedItem(&amp;quot;id&amp;quot;).InnerText&lt;br /&gt;
&lt;br /&gt;
            Dim DeviceDetails As XmlNode&lt;br /&gt;
            Dim devenum As IEnumerator = device.GetEnumerator&lt;br /&gt;
            While (devenum.MoveNext)&lt;br /&gt;
                DeviceDetails = CType(devenum.Current, XmlNode)&lt;br /&gt;
&lt;br /&gt;
                Dim devChildNode As XmlNode&lt;br /&gt;
                Dim childEnum As IEnumerator = DeviceDetails.GetEnumerator&lt;br /&gt;
                While childEnum.MoveNext&lt;br /&gt;
                    devChildNode = CType(childEnum.Current, XmlNode)&lt;br /&gt;
                    Dim DeviceIDAttr As XmlAttribute = doc.CreateAttribute(&amp;quot;DeviceID&amp;quot;)&lt;br /&gt;
                    DeviceIDAttr.InnerText = DeviceID&lt;br /&gt;
                    devChildNode.Attributes.Append(DeviceIDAttr)&lt;br /&gt;
                    If devChildNode.OuterXml.StartsWith(&amp;quot;&amp;lt;state&amp;quot;) Then&lt;br /&gt;
                        States &amp;amp;= devChildNode.OuterXml &amp;amp; vbCrLf&lt;br /&gt;
                    Else&lt;br /&gt;
                        Dim serviceIDstr As String = &amp;quot;&amp;lt;service_&amp;quot; &amp;amp; ServiceID&lt;br /&gt;
                        Dim strtoWrite As String = devChildNode.OuterXml.Replace(serviceIDstr, &amp;quot;&amp;lt;service ID=&amp;quot;&amp;quot;&amp;quot; &amp;amp; ServiceID &amp;amp; &amp;quot;&amp;quot;&amp;quot; &amp;quot;)&lt;br /&gt;
                        strtoWrite = strtoWrite.Replace(&amp;quot;&amp;lt;/service_&amp;quot; &amp;amp; ServiceID &amp;amp; &amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/service&amp;gt;&amp;quot;)&lt;br /&gt;
                        ControlURL &amp;amp;= strtoWrite &amp;amp; vbCrLf&lt;br /&gt;
                        ServiceID += 1&lt;br /&gt;
                    End If&lt;br /&gt;
                End While&lt;br /&gt;
&lt;br /&gt;
            End While&lt;br /&gt;
        End While&lt;br /&gt;
&lt;br /&gt;
        States &amp;amp;= &amp;quot;&amp;lt;/states&amp;gt;&amp;quot;&lt;br /&gt;
        ControlURL &amp;amp;= &amp;quot;&amp;lt;/ControlURLs&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        Dim fout As New IO.StreamWriter(OutputFolder &amp;amp; &amp;quot;\states.xml&amp;quot;)&lt;br /&gt;
        fout.Write(States)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
        fout = New IO.StreamWriter(OutputFolder &amp;amp; &amp;quot;\controlurls.xml&amp;quot;)&lt;br /&gt;
        fout.Write(ControlURL)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Private Function GetWebPageContent(ByVal strURL As String) As String&lt;br /&gt;
        Dim retVal As String = &amp;quot;&amp;quot;&lt;br /&gt;
        Try&lt;br /&gt;
            Dim srRead As System.IO.StreamReader = New System.IO.StreamReader(System.Net.WebRequest.Create(strURL).GetResponse.GetResponseStream)&lt;br /&gt;
            retVal = srRead.ReadToEnd&lt;br /&gt;
        Catch ex As Exception&lt;br /&gt;
            retVal = &amp;quot;Hmm..&amp;quot;&lt;br /&gt;
        End Try&lt;br /&gt;
        Return retVal&lt;br /&gt;
    End Function&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-24T18:51:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 14 tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Devices have states and ControlURLs , these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
    Private Sub Parse_UserData_To_DataSet(ByVal OutputFolder As String, _&lt;br /&gt;
                                          Optional ByVal veraURL As String = &amp;quot;http://myhome:49451&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        Dim Entries As New ArrayList&lt;br /&gt;
        Dim ds As New DataSet&lt;br /&gt;
        Dim userDatajson As String = GetWebPageContent(veraURL &amp;amp; &amp;quot;/data_request?output_format=json&amp;amp;id=user_data&amp;quot;)&lt;br /&gt;
        Dim userData As String = GetWebPageContent(veraURL &amp;amp; &amp;quot;/data_request?output_format=xml&amp;amp;id=user_data&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        'Create Root Data file&lt;br /&gt;
        Dim si As Integer = userData.IndexOf(&amp;quot;&amp;lt;root&amp;quot;)&lt;br /&gt;
        Dim ei As Integer = userData.IndexOf(&amp;quot;&amp;gt;&amp;quot;, si)&lt;br /&gt;
        Dim rootstr As String = userData.Substring(si, ei - si + 1)&lt;br /&gt;
        rootstr = rootstr.Replace(vbLf, &amp;quot;&amp;quot;) &amp;amp; &amp;quot;&amp;lt;/root&amp;gt;&amp;quot;&lt;br /&gt;
        Dim fo As New IO.StreamWriter(OutputFolder &amp;amp; &amp;quot;\root.xml&amp;quot;)&lt;br /&gt;
        fo.WriteLine(rootstr)&lt;br /&gt;
        fo.Close()&lt;br /&gt;
&lt;br /&gt;
        Entries.Add(&amp;quot;root&amp;quot;)&lt;br /&gt;
        'create rest of it!&lt;br /&gt;
        Dim jo As New JSONObject(userDatajson)&lt;br /&gt;
        For Each s As KeyValuePair(Of String, String) In jo._properties&lt;br /&gt;
            si = userData.IndexOf(&amp;quot;&amp;lt;&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
            ei = userData.IndexOf(&amp;quot;&amp;lt;/&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
            If si &amp;gt;= 0 AndAlso ei &amp;gt; 0 Then&lt;br /&gt;
                Dim thisEntry As String = userData.Substring(si, ei - si + (&amp;quot;&amp;lt;/&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;&amp;gt;&amp;quot;).Length)&lt;br /&gt;
                Dim fname As String = OutputFolder &amp;amp; &amp;quot;\&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;.xml&amp;quot;&lt;br /&gt;
                Dim fo1 As New IO.StreamWriter(fname)&lt;br /&gt;
                fo1.WriteLine(thisEntry)&lt;br /&gt;
                fo1.Close()&lt;br /&gt;
                Entries.Add(s.Key)&lt;br /&gt;
            End If&lt;br /&gt;
        Next&lt;br /&gt;
&lt;br /&gt;
        'Put all the tables in a single dataset&lt;br /&gt;
        Dim finalDS As New DataSet&lt;br /&gt;
        For Each s As String In Entries&lt;br /&gt;
            Dim fname As String = OutputFolder &amp;amp; &amp;quot;\&amp;quot; &amp;amp; s &amp;amp; &amp;quot;.xml&amp;quot;&lt;br /&gt;
            ds = New DataSet&lt;br /&gt;
            ds.ReadXml(fname)&lt;br /&gt;
            Try&lt;br /&gt;
                ds.Tables(0).TableName = s&lt;br /&gt;
                finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
                finalDS.Tables(finalDS.Tables.Count - 1).TableName = s&lt;br /&gt;
            Catch ex As Exception&lt;br /&gt;
            End Try&lt;br /&gt;
&lt;br /&gt;
        Next&lt;br /&gt;
&lt;br /&gt;
        'devices have controlURL &amp;amp; states&lt;br /&gt;
        DeviceParse(OutputFolder)&lt;br /&gt;
&lt;br /&gt;
        ds = New DataSet&lt;br /&gt;
        ds.ReadXml(OutputFolder &amp;amp; &amp;quot;\states.xml&amp;quot;)&lt;br /&gt;
        Try&lt;br /&gt;
            ds.Tables(0).TableName = &amp;quot;states&amp;quot;&lt;br /&gt;
            finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
            finalDS.Tables(finalDS.Tables.Count - 1).TableName = &amp;quot;states&amp;quot;&lt;br /&gt;
        Catch ex As Exception&lt;br /&gt;
        End Try&lt;br /&gt;
        ds = New DataSet&lt;br /&gt;
        ds.ReadXml(OutputFolder &amp;amp; &amp;quot;\ControlURLs.xml&amp;quot;)&lt;br /&gt;
        Try&lt;br /&gt;
            ds.Tables(0).TableName = &amp;quot;ControlURLs&amp;quot;&lt;br /&gt;
            finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
            finalDS.Tables(finalDS.Tables.Count - 1).TableName = &amp;quot;ControlURLs&amp;quot;&lt;br /&gt;
        Catch ex As Exception&lt;br /&gt;
            MsgBox(ex.Message)&lt;br /&gt;
        End Try&lt;br /&gt;
&lt;br /&gt;
        finalDS.WriteXml(OutputFolder &amp;amp; &amp;quot;\UserData.xml&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Sub DeviceParse(ByVal OutputFolder As String)&lt;br /&gt;
        'ControlURLs&lt;br /&gt;
        'states&lt;br /&gt;
        Dim filename As String = OutputFolder &amp;amp; &amp;quot;\devices.xml&amp;quot;&lt;br /&gt;
        Dim ControlURL As String = &amp;quot;&amp;lt;ControlURLs&amp;gt;&amp;quot; &amp;amp; vbCrLf&lt;br /&gt;
        Dim States As String = &amp;quot;&amp;lt;states&amp;gt;&amp;quot; &amp;amp; vbCrLf&lt;br /&gt;
&lt;br /&gt;
        Dim ServiceID As Integer = 1&lt;br /&gt;
&lt;br /&gt;
        Dim settings As New XmlReaderSettings()&lt;br /&gt;
        settings.DtdProcessing = DtdProcessing.Parse&lt;br /&gt;
&lt;br /&gt;
        Dim reader As XmlReader = XmlReader.Create(filename, settings)&lt;br /&gt;
        Dim doc As New XmlDocument()&lt;br /&gt;
        doc.Load(reader)&lt;br /&gt;
        Dim root As XmlNode = doc.DocumentElement&lt;br /&gt;
        Dim ienum As IEnumerator = root.GetEnumerator()&lt;br /&gt;
        Dim device As XmlNode&lt;br /&gt;
        While (ienum.MoveNext())&lt;br /&gt;
            device = CType(ienum.Current, XmlNode)&lt;br /&gt;
            Dim DeviceID As String = device.Attributes.GetNamedItem(&amp;quot;id&amp;quot;).InnerText&lt;br /&gt;
&lt;br /&gt;
            Dim DeviceDetails As XmlNode&lt;br /&gt;
            Dim devenum As IEnumerator = device.GetEnumerator&lt;br /&gt;
            While (devenum.MoveNext)&lt;br /&gt;
                DeviceDetails = CType(devenum.Current, XmlNode)&lt;br /&gt;
&lt;br /&gt;
                Dim devChildNode As XmlNode&lt;br /&gt;
                Dim childEnum As IEnumerator = DeviceDetails.GetEnumerator&lt;br /&gt;
                While childEnum.MoveNext&lt;br /&gt;
                    devChildNode = CType(childEnum.Current, XmlNode)&lt;br /&gt;
                    Dim DeviceIDAttr As XmlAttribute = doc.CreateAttribute(&amp;quot;DeviceID&amp;quot;)&lt;br /&gt;
                    DeviceIDAttr.InnerText = DeviceID&lt;br /&gt;
                    devChildNode.Attributes.Append(DeviceIDAttr)&lt;br /&gt;
                    If devChildNode.OuterXml.StartsWith(&amp;quot;&amp;lt;state&amp;quot;) Then&lt;br /&gt;
                        States &amp;amp;= devChildNode.OuterXml &amp;amp; vbCrLf&lt;br /&gt;
                    Else&lt;br /&gt;
                        Dim serviceIDstr As String = &amp;quot;&amp;lt;service_&amp;quot; &amp;amp; ServiceID&lt;br /&gt;
                        Dim strtoWrite As String = devChildNode.OuterXml.Replace(serviceIDstr, &amp;quot;&amp;lt;service ID=&amp;quot;&amp;quot;&amp;quot; &amp;amp; ServiceID &amp;amp; &amp;quot;&amp;quot;&amp;quot; &amp;quot;)&lt;br /&gt;
                        strtoWrite = strtoWrite.Replace(&amp;quot;&amp;lt;/service_&amp;quot; &amp;amp; ServiceID &amp;amp; &amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/service&amp;gt;&amp;quot;)&lt;br /&gt;
                        ControlURL &amp;amp;= strtoWrite &amp;amp; vbCrLf&lt;br /&gt;
                        ServiceID += 1&lt;br /&gt;
                    End If&lt;br /&gt;
                End While&lt;br /&gt;
&lt;br /&gt;
            End While&lt;br /&gt;
        End While&lt;br /&gt;
&lt;br /&gt;
        States &amp;amp;= &amp;quot;&amp;lt;/states&amp;gt;&amp;quot;&lt;br /&gt;
        ControlURL &amp;amp;= &amp;quot;&amp;lt;/ControlURLs&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        Dim fout As New IO.StreamWriter(OutputFolder &amp;amp; &amp;quot;\states.xml&amp;quot;)&lt;br /&gt;
        fout.Write(States)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
        fout = New IO.StreamWriter(OutputFolder &amp;amp; &amp;quot;\controlurls.xml&amp;quot;)&lt;br /&gt;
        fout.Write(ControlURL)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Private Function GetWebPageContent(ByVal strURL As String) As String&lt;br /&gt;
        Dim retVal As String = &amp;quot;&amp;quot;&lt;br /&gt;
        Try&lt;br /&gt;
            Dim srRead As System.IO.StreamReader = New System.IO.StreamReader(System.Net.WebRequest.Create(strURL).GetResponse.GetResponseStream)&lt;br /&gt;
            retVal = srRead.ReadToEnd&lt;br /&gt;
        Catch ex As Exception&lt;br /&gt;
            retVal = &amp;quot;Hmm..&amp;quot;&lt;br /&gt;
        End Try&lt;br /&gt;
        Return retVal&lt;br /&gt;
    End Function&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset</id>
		<title>Parsing Vera User Data - Loadable as .NET Dataset</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Parsing_Vera_User_Data_-_Loadable_as_.NET_Dataset"/>
				<updated>2011-09-24T18:39:17Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: New page: There is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if y...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There is most likely not an elegant way to dothis, but in case someone wants something similar feel free to use this. Please suggest if there are better ways of accomplishing this and if you happen to know so, update this page :)&lt;br /&gt;
&lt;br /&gt;
1.	This will give you a single xml file you could load in .NET through Dataset.Readxml and you will get about 14 tables. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
2.	Devices have states and ControlURLs , these become a separate table with a new attribute added to refer what Device ID  a row in these tables would relate to the devices table. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Parse.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
    Private Sub Parse_UserData_To_DataSet(ByVal OutputFolder As String, _&lt;br /&gt;
                                          Optional ByVal veraURL As String = &amp;quot;http://myhome:49451&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        Dim Entries As New ArrayList&lt;br /&gt;
        Dim ds As New DataSet&lt;br /&gt;
        Dim userDatajson As String = GetWebPageContent(veraURL &amp;amp; &amp;quot;/data_request?output_format=json&amp;amp;id=user_data&amp;quot;)&lt;br /&gt;
        Dim userData As String = GetWebPageContent(veraURL &amp;amp; &amp;quot;/data_request?output_format=xml&amp;amp;id=user_data&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        'Create Root Data file&lt;br /&gt;
        Dim si As Integer = userData.IndexOf(&amp;quot;&amp;lt;root&amp;quot;)&lt;br /&gt;
        Dim ei As Integer = userData.IndexOf(&amp;quot;&amp;gt;&amp;quot;, si)&lt;br /&gt;
        Dim rootstr As String = userData.Substring(si, ei - si + 1)&lt;br /&gt;
        rootstr = rootstr.Replace(vbLf, &amp;quot;&amp;quot;) &amp;amp; &amp;quot;&amp;lt;/root&amp;gt;&amp;quot;&lt;br /&gt;
        Dim fo As New IO.StreamWriter(OutputFolder &amp;amp; &amp;quot;\root.xml&amp;quot;)&lt;br /&gt;
        fo.WriteLine(rootstr)&lt;br /&gt;
        fo.Close()&lt;br /&gt;
&lt;br /&gt;
        Entries.Add(&amp;quot;root&amp;quot;)&lt;br /&gt;
        'create rest of it!&lt;br /&gt;
        Dim jo As New JSONObject(userDatajson)&lt;br /&gt;
        For Each s As KeyValuePair(Of String, String) In jo._properties&lt;br /&gt;
            si = userData.IndexOf(&amp;quot;&amp;lt;&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
            ei = userData.IndexOf(&amp;quot;&amp;lt;/&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
            If si &amp;gt;= 0 AndAlso ei &amp;gt; 0 Then&lt;br /&gt;
                Dim thisEntry As String = userData.Substring(si, ei - si + (&amp;quot;&amp;lt;/&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;&amp;gt;&amp;quot;).Length)&lt;br /&gt;
                Dim fname As String = OutputFolder &amp;amp; &amp;quot;\&amp;quot; &amp;amp; s.Key &amp;amp; &amp;quot;.xml&amp;quot;&lt;br /&gt;
                Dim fo1 As New IO.StreamWriter(fname)&lt;br /&gt;
                fo1.WriteLine(thisEntry)&lt;br /&gt;
                fo1.Close()&lt;br /&gt;
                Entries.Add(s.Key)&lt;br /&gt;
            End If&lt;br /&gt;
        Next&lt;br /&gt;
&lt;br /&gt;
        'Put all the tables in a single dataset&lt;br /&gt;
        Dim finalDS As New DataSet&lt;br /&gt;
        For Each s As String In Entries&lt;br /&gt;
            Dim fname As String = OutputFolder &amp;amp; &amp;quot;\&amp;quot; &amp;amp; s &amp;amp; &amp;quot;.xml&amp;quot;&lt;br /&gt;
            ds = New DataSet&lt;br /&gt;
            ds.ReadXml(fname)&lt;br /&gt;
            Try&lt;br /&gt;
                ds.Tables(0).TableName = s&lt;br /&gt;
                finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
                finalDS.Tables(finalDS.Tables.Count - 1).TableName = s&lt;br /&gt;
            Catch ex As Exception&lt;br /&gt;
            End Try&lt;br /&gt;
&lt;br /&gt;
        Next&lt;br /&gt;
&lt;br /&gt;
        'devices have controlURL &amp;amp; states&lt;br /&gt;
        DeviceParse(OutputFolder)&lt;br /&gt;
&lt;br /&gt;
        ds = New DataSet&lt;br /&gt;
        ds.ReadXml(OutputFolder &amp;amp; &amp;quot;\states.xml&amp;quot;)&lt;br /&gt;
        Try&lt;br /&gt;
            ds.Tables(0).TableName = &amp;quot;states&amp;quot;&lt;br /&gt;
            finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
            finalDS.Tables(finalDS.Tables.Count - 1).TableName = &amp;quot;states&amp;quot;&lt;br /&gt;
        Catch ex As Exception&lt;br /&gt;
        End Try&lt;br /&gt;
        ds = New DataSet&lt;br /&gt;
        ds.ReadXml(OutputFolder &amp;amp; &amp;quot;\ControlURLs.xml&amp;quot;)&lt;br /&gt;
        Try&lt;br /&gt;
            ds.Tables(0).TableName = &amp;quot;ControlURLs&amp;quot;&lt;br /&gt;
            finalDS.Tables.Add(ds.Tables(0).Copy)&lt;br /&gt;
            finalDS.Tables(finalDS.Tables.Count - 1).TableName = &amp;quot;ControlURLs&amp;quot;&lt;br /&gt;
        Catch ex As Exception&lt;br /&gt;
            MsgBox(ex.Message)&lt;br /&gt;
        End Try&lt;br /&gt;
&lt;br /&gt;
        finalDS.WriteXml(OutputFolder &amp;amp; &amp;quot;\UserData.xml&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Sub DeviceParse(ByVal OutputFolder As String)&lt;br /&gt;
        'ControlURLs&lt;br /&gt;
        'states&lt;br /&gt;
        Dim filename As String = OutputFolder &amp;amp; &amp;quot;\devices.xml&amp;quot;&lt;br /&gt;
        Dim ControlURL As String = &amp;quot;&amp;lt;ControlURLs&amp;gt;&amp;quot; &amp;amp; vbCrLf&lt;br /&gt;
        Dim States As String = &amp;quot;&amp;lt;states&amp;gt;&amp;quot; &amp;amp; vbCrLf&lt;br /&gt;
&lt;br /&gt;
        Dim ServiceID As Integer = 1&lt;br /&gt;
&lt;br /&gt;
        Dim settings As New XmlReaderSettings()&lt;br /&gt;
        settings.DtdProcessing = DtdProcessing.Parse&lt;br /&gt;
&lt;br /&gt;
        Dim reader As XmlReader = XmlReader.Create(filename, settings)&lt;br /&gt;
        Dim doc As New XmlDocument()&lt;br /&gt;
        doc.Load(reader)&lt;br /&gt;
        Dim root As XmlNode = doc.DocumentElement&lt;br /&gt;
        Dim ienum As IEnumerator = root.GetEnumerator()&lt;br /&gt;
        Dim device As XmlNode&lt;br /&gt;
        While (ienum.MoveNext())&lt;br /&gt;
            device = CType(ienum.Current, XmlNode)&lt;br /&gt;
            Dim DeviceID As String = device.Attributes.GetNamedItem(&amp;quot;id&amp;quot;).InnerText&lt;br /&gt;
&lt;br /&gt;
            Dim DeviceDetails As XmlNode&lt;br /&gt;
            Dim devenum As IEnumerator = device.GetEnumerator&lt;br /&gt;
            While (devenum.MoveNext)&lt;br /&gt;
                DeviceDetails = CType(devenum.Current, XmlNode)&lt;br /&gt;
&lt;br /&gt;
                Dim devChildNode As XmlNode&lt;br /&gt;
                Dim childEnum As IEnumerator = DeviceDetails.GetEnumerator&lt;br /&gt;
                While childEnum.MoveNext&lt;br /&gt;
                    devChildNode = CType(childEnum.Current, XmlNode)&lt;br /&gt;
                    Dim DeviceIDAttr As XmlAttribute = doc.CreateAttribute(&amp;quot;DeviceID&amp;quot;)&lt;br /&gt;
                    DeviceIDAttr.InnerText = DeviceID&lt;br /&gt;
                    devChildNode.Attributes.Append(DeviceIDAttr)&lt;br /&gt;
                    If devChildNode.OuterXml.StartsWith(&amp;quot;&amp;lt;state&amp;quot;) Then&lt;br /&gt;
                        States &amp;amp;= devChildNode.OuterXml &amp;amp; vbCrLf&lt;br /&gt;
                    Else&lt;br /&gt;
                        Dim serviceIDstr As String = &amp;quot;&amp;lt;service_&amp;quot; &amp;amp; ServiceID&lt;br /&gt;
                        Dim strtoWrite As String = devChildNode.OuterXml.Replace(serviceIDstr, &amp;quot;&amp;lt;service ID=&amp;quot;&amp;quot;&amp;quot; &amp;amp; ServiceID &amp;amp; &amp;quot;&amp;quot;&amp;quot; &amp;quot;)&lt;br /&gt;
                        strtoWrite = strtoWrite.Replace(&amp;quot;&amp;lt;/service_&amp;quot; &amp;amp; ServiceID &amp;amp; &amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/service&amp;gt;&amp;quot;)&lt;br /&gt;
                        ControlURL &amp;amp;= strtoWrite &amp;amp; vbCrLf&lt;br /&gt;
                        ServiceID += 1&lt;br /&gt;
                    End If&lt;br /&gt;
                End While&lt;br /&gt;
&lt;br /&gt;
            End While&lt;br /&gt;
        End While&lt;br /&gt;
&lt;br /&gt;
        States &amp;amp;= &amp;quot;&amp;lt;/states&amp;gt;&amp;quot;&lt;br /&gt;
        ControlURL &amp;amp;= &amp;quot;&amp;lt;/ControlURLs&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        Dim fout As New IO.StreamWriter(OutputFolder &amp;amp; &amp;quot;\states.xml&amp;quot;)&lt;br /&gt;
        fout.Write(States)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
        fout = New IO.StreamWriter(OutputFolder &amp;amp; &amp;quot;\controlurls.xml&amp;quot;)&lt;br /&gt;
        fout.Write(ControlURL)&lt;br /&gt;
        fout.Close()&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
    Private Function GetWebPageContent(ByVal strURL As String) As String&lt;br /&gt;
        Dim retVal As String = &amp;quot;&amp;quot;&lt;br /&gt;
        Try&lt;br /&gt;
            Dim srRead As System.IO.StreamReader = New System.IO.StreamReader(System.Net.WebRequest.Create(strURL).GetResponse.GetResponseStream)&lt;br /&gt;
            retVal = srRead.ReadToEnd&lt;br /&gt;
        Catch ex As Exception&lt;br /&gt;
            retVal = &amp;quot;Hmm..&amp;quot;&lt;br /&gt;
        End Try&lt;br /&gt;
        Return retVal&lt;br /&gt;
    End Function&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:Parse.jpg</id>
		<title>File:Parse.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:Parse.jpg"/>
				<updated>2011-09-24T18:34:41Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/User:Mysticjay</id>
		<title>User:Mysticjay</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/User:Mysticjay"/>
				<updated>2011-09-24T18:30:08Z</updated>
		
		<summary type="html">&lt;p&gt;Mysticjay: New page: Parsing Vera User Data - Loadable as .NET Dataset&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Parsing Vera User Data - Loadable as .NET Dataset]]&lt;/div&gt;</summary>
		<author><name>Mysticjay</name></author>	</entry>

	</feed>