473,320 Members | 1,810 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

Using a form to add records to XML document

Hi,

I haveto use VB to create a form that reads an exisiting XML fileand then allows updates via the VB form.

My problem is that I was able to get VB to read a simple XML file(people.XML), but I'm having problems figuring out how to get VBto read a more complex XML file (people2.xml) and then useadditional text boxes on the same form to add more familymembers. Each family can have from 1 to 5 members.

I've pasted the working code below that read people.xml
but would appreciate any assistance regarding people2.xml

Thanks much,
kyma
people.xml --- SIMPLE XML

<?xml version="1.0"?>
<FamilyList xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Families>
<Family>
<LastName>Flanders</LastName>
<FirstName>Ned</FirstName>
<Age>60</Age>
<Gender>Male</Gender>
</Family>
<Family>
<LastName>Flanders</LastName>
<FirstName>Maude</FirstName>
<Age>34</Age>
<Gender>Female</Gender>
</Family>
<Family>
<LastName>Flanders</LastName>
<FirstName>Rod</FirstName>
<Age>10</Age>
<Gender>Male</Gender>
</Family>
<Family>
<LastName>Flanders</LastName>
<FirstName>Todd</FirstName>
<Age>8</Age>
<Gender>Male</Gender>
</Family>
<Family>
<LastName>Lovejoy</LastName>
<FirstName>Timothy</FirstName>
<Age>37</Age>
<Gender>Male</Gender>
</Family>
<Family>
<LastName>Lovejoy</LastName>
<FirstName>Helen</FirstName>
<Age>36</Age>
<Gender>Female</Gender>
</Family>
<Family>
<LastName>Lovejoy</LastName>
<FirstName>Jessica</FirstName>
<Age>10</Age>
<Gender>Female</Gender>
</Family>
</Families>
</FamilyList>

people2.xml --- COMPLEX XML

<?xml version="1.0"?>
<FamilyList xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Families>
<Family>
<Member>
<LastName>Flanders</LastName>
<FirstName>Ned</FirstName>
<Age>60</Age>
<Gender>Male</Gender>
</Member>
<Member>
<LastName>Flanders</LastName>
<FirstName>Maude</FirstName>
<Age>34</Age>
<Gender>Female</Gender>
</Member>
<Member>
<LastName>Flanders</LastName>
<FirstName>Rod</FirstName>
<Age>10</Age>
<Gender>Male</Gender>
</Member>
<Member>
<LastName>Flanders</LastName>
<FirstName>Todd</FirstName>
<Age>8</Age>
<Gender>Male</Gender>
</Member>
</Family>
<Family>
<Member>
<LastName>Lovejoy</LastName>
<FirstName>Timothy</FirstName>
<Age>37</Age>
<Gender>Male</Gender>
</Member>
<Member>
<LastName>Lovejoy</LastName>
<FirstName>Helen</FirstName>
<Age>36</Age>
<Gender>Female</Gender>
</Member>
<Member>
<LastName>Lovejoy</LastName>
<FirstName>Jessica</FirstName>
<Age>10</Age>
<Gender>Female</Gender>
</Member>
</Family>
</Families>
</FamilyList>

frmFamilyList --- THE FORM

Public Class frmFamilyList
Inherits System.Windows.Forms.Form

...

'Members
Public FamilyList As FamilyList
Private _currentFamilyIndex As Integer

'Current Family
ReadOnly Property CurrentFamily() As Family
Get
Return FamilyList.Items(CurrentFamilyIndex - 1)
End Get
End Property
'Current Address Index
Property CurrentFamilyIndex() As Integer
Get
Return _currentFamilyIndex
End Get
Set(ByVal Value As Integer)
'Set family
_currentFamilyIndex = Value

'Update display
PopulateFormFromFamily(CurrentFamily)

'Record number information
lblRecordNumber.Text = _currentFamilyIndex & " of " &FamilyList.Items.Count

End Set
End Property

'Data location
Public ReadOnly Property DataFilename() As String
Get
'Working folder
Dim folder As String
folder = Environment.CurrentDirectory

'Return folder with name of file
Return folder & "\people.xml"

End Get
End Property

'Populate Family from form fields
Public Sub PopulateFamilyFromForm(ByVal family As Family)
'Copy values
family.LastName = txtLastName.text
family.FirstName = txtFirstName.text
family.Age = txtAge.text
family.Gender = txtGender.text

End Sub

'Populate form from Family
Public Sub PopulateFormFromFamily(ByVal family As Family)
'Copy values
txtLastName.Text = family.LastName
txtFirstName.Text = family.FirstName
txtAge.Text = family.Age
txtGender.Text = family.Gender

End Sub
Private Sub frmFamilyList_Load(ByVal sender As Object, ByVale As System.EventArgs) Handles MyBase.Load
'load family list
FamilyList = SerializableData.load(DataFilename,GetType(FamilyL ist))

'Make sure family list contains items
If FamilyList.Items.Count = 0 ThenFamilyList.AddFamily()

'Select first item
CurrentFamilyIndex = 1

End Sub
Private Sub frmFamilyList_Closing(ByVal sender As Object,ByVal e As System.ComponentModel.CancelEventArgs) HandlesMyBase.Closing
'Save changes as form closes
UpdateCurrentFamily()
SaveChanges()

End Sub

'Save to XML file
Public Sub SaveChanges()
FamilyList.Save(DataFilename)
End Sub

'Ensure file has current values entered into form
Private Sub UpdateCurrentFamily()
PopulateFamilyFromForm(CurrentFamily)

End Sub
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles btnAdd.Click
AddNewFamily()
End Sub
Public Function AddNewFamily() As Family

'Save current family
UpdateCurrentFamily()

'Create new family
Dim newFamily As Family = FamilyList.AddFamily

'Update display
CurrentFamilyIndex = FamilyList.Items.Count

'Return
Return newFamily

End Class

SerializableData --- CLASS SAVING/LOADING

Imports System.IO
Imports System.Xml.Serialization

Public Class SerializableData

'Save object to file
Public Function Save(ByVal filename As String)

'Temporary
Dim tempFilename As String
tempFilename = filename & ".tmp"

'Verify file exists
Dim tempFileInfo As New FileInfo(tempFilename)
If tempFileInfo.Exists = True Then tempFileInfo.Delete()

'Open file
Dim stream As New FileStream(tempFilename,FileMode.Create)

'Save object
Save(stream)

'Close file
stream.Close()

'Remove existing file and rename temp file
tempFileInfo.CopyTo(filename, True)
tempFileInfo.Delete()

End Function

'Perform save
Public Function Save(ByVal stream As Stream)

'Create serializer
Dim serializer As New XmlSerializer(Me.GetType)

'Save file
serializer.Serialize(stream, Me)

End Function

'Load from file
Public Shared Function load(ByVal filename As String, ByValnewType As Type) As Object

'Verify file exists
Dim fileInfo As New FileInfo(filename)
If fileInfo.Exists = False Then

'Create and return blank version of object
Return System.Activator.CreateInstance(newType)

End If

'Open file
Dim stream As New FileStream(filename, FileMode.Open)

'Load object from stream
Dim newObject As Object = load(stream, newType)

'Close stream
stream.Close()

'Return
Return newObject

End Function
Public Shared Function Load(ByVal stream As Stream, ByValnewType As Type) As Object

'Create serializer and load object
Dim serializer As New XmlSerializer(newType)
Dim newObject As Object = serializer.Deserialize(stream)

'Return
Return newObject

End Function
End Class


FamilyList --- CLASS

Imports System.Xml.Serialization

Public Class FamilyList
Inherits SerializableData

'Members
<XmlIgnore()> Public Items As New ArrayList

'Add new family
Public Function AddFamily() As Family

'Declare
Dim newFamily As New Family

'Add
Items.Add(newFamily)

'Return
Return newFamily

End Function
'Works with items collection as an array
Public Property Families() As Family()
Get
'New Array
Dim familyArray(Items.Count - 1) As Family
Items.CopyTo(familyArray)
Return familyArray
End Get
Set(ByVal Value As Family())
'Reset array list
Items.Clear()
'Any values?
If Not Value Is Nothing Then
'process array and populate items
Dim family As Family
For Each family In Value
Items.Add(family)
Next
End If
End Set
End Property
End Class

Family --- CLASS

Public Class Family
Inherits SerializableData

'Members
Public LastName As String
Public FirstName As String
Public Age As String
Public Gender As String

End Class

-----------------------
Posted by a user from .NET 247 (http://www.dotnet247.com/)

<Id>kftW9oBAvU60IVqDullVCw==</Id>
Nov 12 '05 #1
1 2376
"VB" is not as easy as other languages.

Is was just more so previewed and as such a token so percieved.

As was freedom and liberty in 1776.

------------
In reality, do you want more than one click or key pressed to
compile and run your changes at a client presented.
And look at the galore of umpteen forms and files and permissions
licenses that come along.

===========
In short. You are OUT.



"kyma via .NET 247" <an*******@dotnet247.com> wrote in message
news:eU**************@tk2msftngp13.phx.gbl...
Hi,

I haveto use VB to create a form that reads an exisiting XML file and then
allows updates via the VB form.

My problem is that I was able to get VB to read a simple XML file
(people.XML), but I'm having problems figuring out how to get VB to read a
more complex XML file (people2.xml) and then use additional text boxes on
the same form to add more family members. Each family can have from 1 to 5
members.

I've pasted the working code below that read people.xml
but would appreciate any assistance regarding people2.xml

Thanks much,
kyma
people.xml --- SIMPLE XML

<?xml version="1.0"?>
<FamilyList xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Families>
<Family>
<LastName>Flanders</LastName>
<FirstName>Ned</FirstName>
<Age>60</Age>
<Gender>Male</Gender>
</Family>
<Family>
<LastName>Flanders</LastName>
<FirstName>Maude</FirstName>
<Age>34</Age>
<Gender>Female</Gender>
</Family>
<Family>
<LastName>Flanders</LastName>
<FirstName>Rod</FirstName>
<Age>10</Age>
<Gender>Male</Gender>
</Family>
<Family>
<LastName>Flanders</LastName>
<FirstName>Todd</FirstName>
<Age>8</Age>
<Gender>Male</Gender>
</Family>
<Family>
<LastName>Lovejoy</LastName>
<FirstName>Timothy</FirstName>
<Age>37</Age>
<Gender>Male</Gender>
</Family>
<Family>
<LastName>Lovejoy</LastName>
<FirstName>Helen</FirstName>
<Age>36</Age>
<Gender>Female</Gender>
</Family>
<Family>
<LastName>Lovejoy</LastName>
<FirstName>Jessica</FirstName>
<Age>10</Age>
<Gender>Female</Gender>
</Family>
</Families>
</FamilyList>

people2.xml --- COMPLEX XML

<?xml version="1.0"?>
<FamilyList xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Families>
<Family>
<Member>
<LastName>Flanders</LastName>
<FirstName>Ned</FirstName>
<Age>60</Age>
<Gender>Male</Gender>
</Member>
<Member>
<LastName>Flanders</LastName>
<FirstName>Maude</FirstName>
<Age>34</Age>
<Gender>Female</Gender>
</Member>
<Member>
<LastName>Flanders</LastName>
<FirstName>Rod</FirstName>
<Age>10</Age>
<Gender>Male</Gender>
</Member>
<Member>
<LastName>Flanders</LastName>
<FirstName>Todd</FirstName>
<Age>8</Age>
<Gender>Male</Gender>
</Member>
</Family>
<Family>
<Member>
<LastName>Lovejoy</LastName>
<FirstName>Timothy</FirstName>
<Age>37</Age>
<Gender>Male</Gender>
</Member>
<Member>
<LastName>Lovejoy</LastName>
<FirstName>Helen</FirstName>
<Age>36</Age>
<Gender>Female</Gender>
</Member>
<Member>
<LastName>Lovejoy</LastName>
<FirstName>Jessica</FirstName>
<Age>10</Age>
<Gender>Female</Gender>
</Member>
</Family>
</Families>
</FamilyList>

frmFamilyList --- THE FORM

Public Class frmFamilyList
Inherits System.Windows.Forms.Form

....

'Members
Public FamilyList As FamilyList
Private _currentFamilyIndex As Integer

'Current Family
ReadOnly Property CurrentFamily() As Family
Get
Return FamilyList.Items(CurrentFamilyIndex - 1)
End Get
End Property
'Current Address Index
Property CurrentFamilyIndex() As Integer
Get
Return _currentFamilyIndex
End Get
Set(ByVal Value As Integer)
'Set family
_currentFamilyIndex = Value

'Update display
PopulateFormFromFamily(CurrentFamily)

'Record number information
lblRecordNumber.Text = _currentFamilyIndex & " of " &
FamilyList.Items.Count

End Set
End Property

'Data location
Public ReadOnly Property DataFilename() As String
Get
'Working folder
Dim folder As String
folder = Environment.CurrentDirectory

'Return folder with name of file
Return folder & "\people.xml"

End Get
End Property

'Populate Family from form fields
Public Sub PopulateFamilyFromForm(ByVal family As Family)
'Copy values
family.LastName = txtLastName.text
family.FirstName = txtFirstName.text
family.Age = txtAge.text
family.Gender = txtGender.text

End Sub

'Populate form from Family
Public Sub PopulateFormFromFamily(ByVal family As Family)
'Copy values
txtLastName.Text = family.LastName
txtFirstName.Text = family.FirstName
txtAge.Text = family.Age
txtGender.Text = family.Gender

End Sub
Private Sub frmFamilyList_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'load family list
FamilyList = SerializableData.load(DataFilename,
GetType(FamilyList))

'Make sure family list contains items
If FamilyList.Items.Count = 0 Then FamilyList.AddFamily()

'Select first item
CurrentFamilyIndex = 1

End Sub
Private Sub frmFamilyList_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
'Save changes as form closes
UpdateCurrentFamily()
SaveChanges()

End Sub

'Save to XML file
Public Sub SaveChanges()
FamilyList.Save(DataFilename)
End Sub

'Ensure file has current values entered into form
Private Sub UpdateCurrentFamily()
PopulateFamilyFromForm(CurrentFamily)

End Sub
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnAdd.Click
AddNewFamily()
End Sub
Public Function AddNewFamily() As Family

'Save current family
UpdateCurrentFamily()

'Create new family
Dim newFamily As Family = FamilyList.AddFamily

'Update display
CurrentFamilyIndex = FamilyList.Items.Count

'Return
Return newFamily

End Class

SerializableData --- CLASS SAVING/LOADING

Imports System.IO
Imports System.Xml.Serialization

Public Class SerializableData

'Save object to file
Public Function Save(ByVal filename As String)

'Temporary
Dim tempFilename As String
tempFilename = filename & ".tmp"

'Verify file exists
Dim tempFileInfo As New FileInfo(tempFilename)
If tempFileInfo.Exists = True Then tempFileInfo.Delete()

'Open file
Dim stream As New FileStream(tempFilename, FileMode.Create)

'Save object
Save(stream)

'Close file
stream.Close()

'Remove existing file and rename temp file
tempFileInfo.CopyTo(filename, True)
tempFileInfo.Delete()

End Function

'Perform save
Public Function Save(ByVal stream As Stream)

'Create serializer
Dim serializer As New XmlSerializer(Me.GetType)

'Save file
serializer.Serialize(stream, Me)

End Function

'Load from file
Public Shared Function load(ByVal filename As String, ByVal newType As
Type) As Object

'Verify file exists
Dim fileInfo As New FileInfo(filename)
If fileInfo.Exists = False Then

'Create and return blank version of object
Return System.Activator.CreateInstance(newType)

End If

'Open file
Dim stream As New FileStream(filename, FileMode.Open)

'Load object from stream
Dim newObject As Object = load(stream, newType)

'Close stream
stream.Close()

'Return
Return newObject

End Function
Public Shared Function Load(ByVal stream As Stream, ByVal newType As
Type) As Object

'Create serializer and load object
Dim serializer As New XmlSerializer(newType)
Dim newObject As Object = serializer.Deserialize(stream)

'Return
Return newObject

End Function
End Class


FamilyList --- CLASS

Imports System.Xml.Serialization

Public Class FamilyList
Inherits SerializableData

'Members
<XmlIgnore()> Public Items As New ArrayList

'Add new family
Public Function AddFamily() As Family

'Declare
Dim newFamily As New Family

'Add
Items.Add(newFamily)

'Return
Return newFamily

End Function
'Works with items collection as an array
Public Property Families() As Family()
Get
'New Array
Dim familyArray(Items.Count - 1) As Family
Items.CopyTo(familyArray)
Return familyArray
End Get
Set(ByVal Value As Family())
'Reset array list
Items.Clear()
'Any values?
If Not Value Is Nothing Then
'process array and populate items
Dim family As Family
For Each family In Value
Items.Add(family)
Next
End If
End Set
End Property
End Class

Family --- CLASS

Public Class Family
Inherits SerializableData

'Members
Public LastName As String
Public FirstName As String
Public Age As String
Public Gender As String

End Class

-----------------------
Posted by a user from .NET 247 (http://www.dotnet247.com/)

<Id>kftW9oBAvU60IVqDullVCw==</Id>

Nov 12 '05 #2

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

19
by: James Fortune | last post by:
I have a lot of respect for David Fenton and Allen Browne, but I don't understand why people who know how to write code to completely replace a front end do not write something that will automate...
3
by: Lord0 | last post by:
I *think* I need to be able to validate subsets of an XML document using different schema. The functionality I'm trying to implement is this. a) External suppliers produce an XML document...
8
by: Roland Hall | last post by:
In Access you use "*" + + "*", + can be replaced with & Calling a parameterized query in Access requires % be used in place of *, however, all that I have read show dynamic SQL passed to Access: ...
1
by: grabit | last post by:
Hi Peoples i have a search page with a form field "subject" on my results page i have a paging routine . the first page lists its 10 records no trouble but when i click the "next" link i get a error...
1
by: shalini jain | last post by:
Hi, I want to know how can we do pagination using XSL. There are number of tutorials available on pagination using PHP but nothing with XSL. i am really stuck with my code. Below is the code that...
1
by: deedeem | last post by:
Hi there, I am having trouble getting all my records to be placed into my WORD document from my ACCESS form. I have a form with a subform displayed and a control button that executes a macro. The...
30
by: SSG001 | last post by:
Hi, I'm using scriptaculous autocomplete for my text box and it works perfectly ok i have made server.php for fetching the values in the ul list and it is shown correctly on the main form but after...
12
by: prashant | last post by:
hi, i am trying to create an xml tag ref to hold link.php?id=1; or link.php?id=2 and so on. I want the links for all the fields(id) in the databse so that when i call them in my html page for...
1
by: javediq143 | last post by:
Hi All, This is my first post in this forum. I'm developing a CMS for my latest website. This CMS is also in PhP & MySQL. I'm done with the ADD section where the Admin can INSERT new records in...
13
by: ramprakashjava | last post by:
hi, i hav "java.lang.NullPointerException" error while Deleting table records using checkbox in jsp here i enclosed files help quickly plzzz.. ...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.