Вопрос

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

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

Я не уверен, почему это происходит, учитывая, что предыдущий элемент был закрыт. Я пытался найти писателя. 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
Это было полезно?

Решение

XML-документ может иметь только один корневой элемент. Вы запускаете документ и пишете «заголовок» элемент, закрывающий «заголовок» элемент, затем начинается новая «переменная» элемент - который будет вторым корневым элементом.

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

Другие советы

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

 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top