Question

J'écris un fichier XML en utilisant VB.net. Lorsque j'essaie de créer un autre élément à écrire après le premier, le message d'erreur suivant s'affiche:

"Token StartElement dans l'état EndRootElement entraînerait un document XML non valide. Assurez-vous que le paramètre ConformanceLevel est défini sur ConformanceLevel.Fragment ou ConformanceLevel.Auto si vous souhaitez écrire un fragment XML. "

Je ne suis pas sûr de savoir pourquoi il le fait étant donné que l'élément précédent a été fermé. J'ai essayé de chercher un écrivain.WriteEndRootElement, mais je n'en ai pas vu. Des suggestions pour le faire fonctionner? =)

    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
Était-ce utile?

La solution

Un document XML ne peut contenir qu'un seul élément racine. Vous démarrez le document en écrivant l’en-tête " élément, fermant l’en-tête " en-tête " élément, puis commencez une nouvelle "variable". element - ce qui serait un deuxième élément racine.

Soit vous insérez les deux " en-tête " et " variable " dans un seul élément de niveau supérieur, ou déplacez l'un d'eux dans l'autre.

Autres conseils

Vous pouvez essayer quelque chose comme ça

 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top