XmlWriter não criar novo elemento em VB.net
Pergunta
Eu estou escrevendo um arquivo XML usando VB.net. Quando tento criar um outro elemento a ser escrito após o primeiro, ele erros fora, dizendo:
"token startElement no estado EndRootElement resultaria em um documento XML inválido. Certifique-se de que a definição ConformanceLevel está definido para ConformanceLevel.Fragment ou ConformanceLevel.Auto se você quer escrever um fragmento XML."
Eu não estou certo porque ele está fazendo isso considerando que o elemento anterior foi fechada. Eu tentei olhar para um writer.WriteEndRootElement, mas eu não vi nenhum lá. Todas as sugestões para fazê-lo funcionar? =)
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
Solução
Um documento XML pode ter apenas um elemento raiz. Você está começando o documento, escrevendo o elemento "header", fechando o elemento "header", em seguida, iniciar uma nova "variável" elemento -. O que seria um segundo elemento raiz
De qualquer incluir tanto "cabeçalho" e "variável" dentro de um único elemento de nível mais elevado, ou mover-se uma delas no interior da outra.
Outras dicas
Você pode tentar algo como isto
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