XmlWriter не создает новый элемент в VB.net - PullRequest
1 голос
/ 23 октября 2009

Я пишу XML-файл, используя VB.net. Когда я пытаюсь создать другой элемент для записи после первого, он выдает ошибку, говоря:

"Токен StartElement в состоянии EndRootElement приведет к неверному документу XML. Убедитесь, что для параметра ConformanceLevel установлено значение ConformanceLevel.Fragment или ConformanceLevel.Auto, если вы хотите записать фрагмент XML."

Я не уверен, почему он делает это, учитывая, что предыдущий элемент был закрыт. Я пытался найти писателя. WriteEndRootElement, но я не видел там ничего. Любые предложения, чтобы заставить его работать? =)

    Private Sub writeXMLFile(ByVal childform As Fone_Builder_Delux.frmData, ByVal filename As String)

        Dim xmlSettings As New XmlWriterSettings()
        xmlSettings.Indent = True
        xmlSettings.NewLineOnAttributes = True

        Using writer As XmlWriter = XmlWriter.Create(filename, xmlSettings)

            writer.WriteStartDocument()
            writer.WriteStartElement("header")

            writer.WriteStartAttribute("filepath")
            writer.WriteValue(filename)
            writer.WriteEndAttribute()

            writer.WriteEndElement()
            writer.WriteStartElement("variable")
            writer.WriteStartAttribute("varName")

            writer.WriteValue(childform.datagridHeaders.Item(0, 1))

            writer.WriteEndAttribute()
            writer.WriteEndElement()
            writer.WriteEndDocument()
            writer.Flush()

        End Using


    End Sub

Ответы [ 2 ]

6 голосов
/ 23 октября 2009

XML-документ может иметь только один корневой элемент.Вы начинаете документ, пишете элемент header, закрываете элемент header, затем начинаете новый элемент variable, который будет вторым корневым элементом.

Либо заключите оба заголовкаи «переменная» внутри одного элемента более высокого уровня или переместите одну из них в другую.

1 голос
/ 23 октября 2009

Вы можете попробовать что-то вроде этого

 Private Sub writeXMLFile(ByVal childform As Fone_Builder_Delux.frmData, ByVal filename As String)

    Dim xmlSettings As New XmlWriterSettings()
    xmlSettings.Indent = True
    xmlSettings.NewLineOnAttributes = True

    Using writer As XmlWriter = XmlWriter.Create(filename, xmlSettings)

        writer.WriteStartDocument()
        writer.WriteStartElement("root")
        writer.WriteStartElement("header")

        writer.WriteStartAttribute("filepath")
        writer.WriteValue(filename)
        writer.WriteEndAttribute()

        writer.WriteEndElement()
        writer.WriteStartElement("variable")
        writer.WriteStartAttribute("varName")

        writer.WriteValue(childform.datagridHeaders.Item(0, 1))

        writer.WriteEndAttribute()
        writer.WriteEndElement()
        writer.WriteEndElement()
        writer.WriteEndDocument()
        writer.Flush()

    End Using


End Sub
...