2009-10-23 11 views
1

J'écris un fichier XML en utilisant VB.net. Lorsque j'essaie de créer un autre élément à écrire après le premier, il émet une erreur en disant:XmlWriter ne crée pas un nouvel élément dans VB.net

"Token StartElement dans l'état EndRootElement résulterait en un document XML non valide. Assurez-vous que le paramètre ConformanceLevel est défini sur ConformanceLevel.Fragment ou ConformanceLevel.Auto si vous voulez é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 writer.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 

Répondre

6

Un document XML peut avoir un seul élément racine. Vous démarrez le document, en écrivant l'élément "header", en fermant l'élément "header", puis en démarrant un nouvel élément "variable" - qui serait un deuxième élément racine. Soit enfermez à la fois "en-tête" et "variable" dans un seul élément de niveau supérieur, ou déplacez l'un d'entre eux dans l'autre.

+0

Merci, je ne savais pas que sur les fichiers XML. Je vais probablement les enfermer dans un élément maître. Merci! –

1

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