Hi
I have 2 xml files as follows:
student.xml
="1.0"="utf-8"
<StudentTable>
<Student>
<StudentID>1</StudentID>
<ClassID>1</ClassID>
<FirstName>James</FirstName>
<Marks>82.65</Marks>
</Student>
</StudentTable>
classes.xml
="1.0"="utf-8"
<ClassesTable>
<Classes>
<ClassID>1</ClassID>
<ClassNo>Classroom 1</ClassNo>
</Classes>
<Classes>
<ClassID>2</ClassID>
<ClassNo>Classroom 2</ClassNo>
</Classes>
</ClassesTable>
and the mainDataSet.xsd file
="1.0"="utf-8"
<xs:schema id="mainDataSet" targetNamespace="http://tempuri.org/mainDataSet.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/mainDataSet.xsd" xmlns:mstns="http://tempuri.org/mainDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Classes">
<xs:complexType>
<xs:sequence>
<xs:element name="ClassID" type="xs:integer" minOccurs="0" />
<xs:element name="ClassNo" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:key name="ClassID">
<xs:selector xpath="." />
<xs:field xpath="mstns:ClassID" />
</xs:key>
</xs:element>
<xs:element name="Student">
<xs:complexType>
<xs:sequence>
<xs:element name="StudentID" type="xs:integer" />
<xs:element name="FirstName" type="xs:string" />
<xs:element name="ClassID" type="xs:integer" />
<xs:element name="Marks" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:key name="StudentID">
<xs:selector xpath="." />
<xs:field xpath="mstns:StudentID" />
</xs:key>
<xs:keyref name="ClassesStudent" refer="ClassID">
<xs:selector xpath="." />
<xs:field xpath="mstns:ClassID" />
</xs:keyref>
</xs:element>
</xs:schema>
The code below saves a new student to the student.xml file.
Dim newStudent As DataRow = Me.myDataSet.Tables("Student").NewRow
newStudent("StudentID") = Me.StudentIDTextBox.Text
newStudent("FirstName") = Me.FirstNameTextBox.Text
newStudent("ClassID") = Me.ClassIDComboBox.SelectedValue
newStudent("Marks") = Me.MarksTextBox.Text
Me.myDataSet.Tables("Student").Rows.Add(newStudent)
Me.myDataSet.WriteXml(Application.StartupPath & "\AppData\Students.xml", XmlWriteMode.IgnoreSchema)
I, however, have these problems:
1. when a student is added, irrespective of the
XMLWriteMode
that I use, the new student.xml file ends up with a copy of the classes.xml file in it as well, each time. (the reference to my xsd file is added, too, but I have no problem with that).
student.xml (after adding new student)
="1.0"="yes"
<mainDataSet xmlns="http://tempuri.org/mainDataSet.xsd">
<Classes>
<ClassID>1</ClassID>
<ClassNo>Classroom 1</ClassNo>
</Classes>
<Classes>
<ClassID>2</ClassID>
<ClassNo>Classroom 2</ClassNo>
</Classes>
<Classes>
<ClassID>1</ClassID>
<ClassNo>Classroom 1</ClassNo>
</Classes>
<Classes>
<ClassID>2</ClassID>
<ClassNo>Classroom 2</ClassNo>
</Classes>
<Student>
<StudentID>5</StudentID>
<FirstName>James</FirstName>
<ClassID>3</ClassID>
<Marks>82.65</Marks>
</Student>
<Student>
<StudentID>2</StudentID>
<FirstName>Jamesm</FirstName>
<ClassID>1</ClassID>
<Marks>82.65</Marks>
</Student>
<Student>
<StudentID>2</StudentID>
<FirstName>Jamesm</FirstName>
<ClassID>1</ClassID>
<Marks>82.65</Marks>
</Student>
</mainDataSet>
I would like to know why it replicates the parent xml content into this xml file and how to stop it?
2. Does XML support autoincrement? How can it be implemented in my code above?
3. Does XML support referential integrity? eg, I would like to have, say when you delete student with ID 2, the next insertion should not add with ID 2, but jump to ID 3.