J'ai des ennuis avec XMLTextWriter.WriteStartElement lancer une exception:XmlTextWriter répond par System.InvalidOperationException lors de la création de deuxième élément
System.InvalidOperationException
en essayant d'écrire le deuxième élément dans mon document XML.
Cette erreur est de nouveau "The Writer is closed". Je ne l'ai pas fermé, donc je devine qu'il est tombé hors de la portée ??
J'ai créé une classe pour écrire un fichier XML en utilisant XMLTextWriter en tant qu'objet dans ma classe. Voici le code pertinent. J'ai trouvé un autre poste sur codeguru qui n'a jamais été répondu avec exactement le même problème. Toute idée de solution de contournement ou autre serait appréciée.
Function CreateXML()...
Try
_listDocument = New XmlTextWriter(_xmlDI.FullName & "\\" & currentFilename, Nothing)
CreateHeader()
AddTimeDateNode()
CreateXML = True
Catch xmlErr As XmlException
MsgBox("Unable to create temporary file(" & currentFilename & ") that is used to change your whitelist or blacklist. " & _
"More technical information: " & xmlErr.Message, MsgBoxStyle.Critical, "Can't Continue")
End Try
End Function
Function AddListMember(ByVal listType As String, ByVal listItem As String, ByVal action As String) As Boolean
_listDocument.WriteStartElement(listItem) <-- CODE THROWS EXCEPTION HERE!
_listDocument.WriteAttributeString("listType", listType)
_listDocument.WriteAttributeString("action", action)
_listDocument.WriteString(listItem)
_listDocument.WriteEndElement()
_listDocument.WriteWhitespace(Chr(13) & Chr(10) & "\t")
Return True
End Function
'Sets the XML header
Private Function CreateHeader() As Boolean
_listDocument.WriteStartDocument(False)
_listDocument.WriteWhitespace(Chr(13) & Chr(10))
Return True
End Function
'Add Time Date node
Private Function AddTimeDateNode() As Boolean
_listDocument.WriteStartElement("DateTimeAdded")
_listDocument.WriteString(DateTime.Now.ToString)
_listDocument.WriteEndElement()
_listDocument.WriteWhitespace(Chr(13) & Chr(10))
Return True
End Function
J'appelle ces fonctions après l'instanciation d'une dimension de ListXML (le nom de ma classe) avec le code suivant:
Dim xmloutput As New ListXML
xmloutput.CreateXML()
xmloutput.AddListMember(xmloutput.ReturnWhiteList, currentItem.SenderEmailAddress, xmloutput.ReturnAddAction)
Merci Jon! C'était le problème. –