Pregunta

Estoy escribiendo un archivo XML utilizando VB.net. Cuando intento crear otro elemento para escribir después del primero, se produce un error diciendo:

" Token StartElement en el estado EndRootElement daría como resultado un documento XML no válido. Asegúrese de que la configuración de ConformanceLevel esté establecida en ConformanceLevel.Fragment o ConformanceLevel.Auto si desea escribir un fragmento XML. & Quot;

No estoy seguro de por qué está haciendo esto teniendo en cuenta que el elemento anterior se ha cerrado. Intenté buscar un escritor.WriteEndRootElement, pero no vi ninguno allí. ¿Alguna sugerencia para que funcione? =)

    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
¿Fue útil?

Solución

Un documento XML solo puede tener un elemento raíz. Estás comenzando el documento, escribiendo el encabezado " " " elemento, cerrando el " encabezado " elemento, y luego iniciar una nueva " variable " elemento - que sería un segundo elemento raíz.

O bien, encierre ambos " encabezado " y " variable " dentro de un único elemento de nivel superior, o mueva uno de ellos dentro del otro.

Otros consejos

Puedes probar algo como esto

 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top