简体   繁体   English

Visual Basic数组数据到XML

[英]Visual Basic Array Data to XML

Struggling to export the contents of an array to an XML file. 努力将数组的内容导出到XML文件。 I have an error on line 101. Can anyone spot the error here? 我在第101行出现错误。有人可以在这里发现错误吗? or am I using the wrong method? 还是我使用了错误的方法?

Thanks guys!! 多谢你们!!

Vic 维克

CODE: 码:

createNode((Str(i + 1)), strArray(i, 0), strArray(i, 1), strArray(i, 2), strArray(i, 3), strArray(i, 4), strArray(i, 5), writer)

ERRORS: 错误:

Error 2 Value of type 'System.Xml.XmlTextWriter' cannot be converted to 'String'. 错误2类型'System.Xml.XmlTextWriter'的值不能转换为'String'。

Error 1 Argument not specified for parameter 'writer' of 'Private Sub createNode(intQuantity As String, pNumber As String, pGiven As String, pFamily As String, pResult As String, pTotal As String, pPercent As String, pGrade As String, writer As System.Xml.XmlTextWriter)'. 错误1参数未为'Private Sub createNode(intQuantity作为字符串,pNumber作为字符串,pGiven作为字符串,pFamily作为字符串,pResult作为字符串,pTotal作为字符串,pPercent作为字符串,pGrade作为字符串,p作为字符串System.Xml.XmlTextWriter)”。

Here is my code: 这是我的代码:

Imports System.Xml

Public Class frmStudentGrades
    ' Author: Victoria Farrell
    ' Date: August 2018
    'Purpose: To calculate the display the graded results of student marks entered.

    Dim intQuantity As Integer                          ' This variable handles the total number of students in the class
    Dim strArray(intQuantity, 5) As String              ' This Array handles all the data - student names, marks, percentages and final grades
    Dim Counter As Integer                              ' This variable counts how many students are entered and handles each row in the array.

    Private Sub btnSize_Click(sender As Object, e As EventArgs) Handles btnSize.Click

        ' This subroutine reads in the number of students in the class and informs the user to enter student data.
        ' Counter is set to zero at this point to intialise the first point in the array.

        intQuantity = Val(txtQuantity.Text)
        Counter = 0
        MsgBox("Your class has " & intQuantity & " students. Please enter each student and their marks one by one.")
    End Sub

    Private Sub btnStudent_Click(sender As Object, e As EventArgs) Handles btnStudent.Click

        Dim strArray(intQuantity, 5) As String
        ' The array is defined in terms of the size of the class (numbers of students)

        If Counter < intQuantity Then

            MsgBox("You have entered student number " & (Counter + 1))
            ' This message informs the user that they have entered data into the array and how many students have been entered based on the counter.


            strArray(Counter, 0) = txtGivenName.Text     ' The student given name is entered into the first column of the Counter-th row
            strArray(Counter, 1) = txtFamilyName.Text    ' The student family name is entered into the second column of the Counter-th row
            strArray(Counter, 2) = txtResult.Text        ' The student's result is entered into the third column of the Counter-th row
            strArray(Counter, 3) = txtTotal.Text         ' The total marks for the assessment is entered into the fourth column of the Counter-th row

            strArray(Counter, 4) = CStr(Math.Round(((Val(strArray(Counter, 2)) / Val(strArray(Counter, 3))) * 100), 2))

            ' This calcuates the percentage of the results and enters it into the fifth column of the Counter-th row

            ' This IF statement tests the percentage and decides what the Letter Grade will be allocated. this goes into the sixth column.
            If strArray(Counter, 4) < 50 Then
                strArray(Counter, 5) = "F"
            ElseIf strArray(Counter, 4) >= 50 And strArray(Counter, 4) < 60 Then
                strArray(Counter, 5) = "E"
            ElseIf strArray(Counter, 4) >= 60 And strArray(Counter, 4) < 70 Then
                strArray(Counter, 5) = "D"
            ElseIf strArray(Counter, 4) >= 70 And strArray(Counter, 4) < 80 Then
                strArray(Counter, 5) = "C"
            ElseIf strArray(Counter, 4) >= 80 And strArray(Counter, 4) < 90 Then
                strArray(Counter, 5) = "B"
            ElseIf strArray(Counter, 4) >= 90 And strArray(Counter, 4) <= 100 Then
                strArray(Counter, 5) = "A"
            End If


            ' The content of the entire row is added to the list box to be displayed.
            listResults.Items.Add(strArray(Counter, 0) & " " & strArray(Counter, 1) & " " & strArray(Counter, 2) & "/" & strArray(Counter, 3) & " :  " & strArray(Counter, 4) & "% Final Grade: " & strArray(Counter, 5))

            ' One is added to the counter because the row is complete and we need to count it. 
            Counter = Counter + 1

            ' when the Counter reaches the size of the class a warning will appear if they try to enter more students.
        ElseIf Counter = intQuantity Then
            MsgBox("You have entered all the students into your class")

        End If


    End Sub

    Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click

        ' This subroutine allows the user to clear the data from all the text boxes.

        txtGivenName.Text = " "
        txtFamilyName.Text = " "
        txtResult.Text = " "
        txtTotal.Text = " "
    End Sub

    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click

        ' This subroutine allows the user to close the program.

        Me.Close()

    End Sub

        Private Sub btnXml_Click(sender As Object, e As EventArgs) Handles btnXml.Click

    Dim writer As New XmlTextWriter("StudentResults.xml", System.Text.Encoding.UTF8)

    writer.WriteStartDocument(True)
    writer.Formatting = Formatting.Indented
    writer.Indentation = 2
    writer.WriteStartElement("Table")

    For i As Integer = 0 To intQuantity

        createNode((i + 1), strArray(i, 0), strArray(i, 1), strArray(i, 2), strArray(i, 3), strArray(i, 4), strArray(i, 5), writer)

    Next i

    writer.WriteEndElement()
    writer.WriteEndDocument()
    writer.Close()
End Sub

Private Sub createNode(ByVal intQuantity As String, pNumber As String, pGiven As String, pFamily As String, pResult As String, pTotal As String, pPercent As String, pGrade As String)

    Dim writer As New XmlTextWriter("StudentResults.xml", System.Text.Encoding.UTF8)

    For i As Integer = 0 To intQuantity



        writer.WriteStartElement("Student_Number")
        writer.WriteString(pNumber)
        writer.WriteEndElement()

        writer.WriteStartElement("Student_Given_Name")
        writer.WriteString(pGiven)
        writer.WriteEndElement()

        writer.WriteStartElement("Student_Family_Name")
        writer.WriteString(pFamily)
        writer.WriteEndElement()

        writer.WriteStartElement("Student_Result")
        writer.WriteString(pResult)
        writer.WriteEndElement()

        writer.WriteStartElement("Student_Total")
        writer.WriteString(pTotal)
        writer.WriteEndElement()

        writer.WriteStartElement("Student_Percentage")
        writer.WriteString(pPercent)
        writer.WriteEndElement()

        writer.WriteStartElement("Student_Grade")
        writer.WriteString(pGrade)
        writer.WriteEndElement()


    Next

End Sub

End Class 末级

You call your createNode Function with 8 values. 您使用8个值调用createNode函数。 Your 8th value in the call is writer which is a XmlTextWriter but in your createNode Function the 8th value is pGrade As String . 调用中的第8个值是writer ,它是XmlTextWriter但是在createNode函数中,第8个值是pGrade As String The writer need to be the 9th value when you call your createNode function. 调用createNode函数时, writer必须为第9个值。 Also when your function ask for 9 values you need to provide 9 values. 同样,当您的函数要求输入9个值时,您需要提供9个值。

You should review your code again. 您应该再次检查代码。 It can be quite confusing when the lines get so long. 当行太长时,可能会造成混乱。 Also ByVal is not necessary. 同样, ByVal并不是必需的。 You can delete it out of your createNode Function. 您可以将其从createNode函数中删除。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM